diff --git a/src/module.ts b/src/module.ts
index 69d81f6025..29da264e0d 100644
--- a/src/module.ts
+++ b/src/module.ts
@@ -1457,7 +1457,7 @@ export class Module {
       binaryen._BinaryenSetAlwaysInlineMaxSize(
         optimizeLevel == 0 && shrinkLevel >= 0
           ? 2
-          : 4
+          : 9
       );
       binaryen._BinaryenSetFlexibleInlineMaxSize(65);
       binaryen._BinaryenSetOneCallerInlineMaxSize(80);
diff --git a/std/assembly/atomics.ts b/std/assembly/atomics.ts
index d506624706..076e384d0c 100644
--- a/std/assembly/atomics.ts
+++ b/std/assembly/atomics.ts
@@ -2,9 +2,6 @@ import { ArrayBufferView } from "./arraybuffer";
 import { E_INDEXOUTOFRANGE } from "./util/error";
 
 export namespace Atomics {
-
-  // @ts-ignore: decorator
-  @inline
   export function load<T extends ArrayBufferView>(array: T, index: i32): valueof<T> {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.load<valueof<T>>(
@@ -12,8 +9,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function store<T extends ArrayBufferView>(array: T, index: i32, value: valueof<T>): void {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     atomic.store<valueof<T>>(
@@ -22,8 +17,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function add<T extends ArrayBufferView>(array: T, index: i32, value: valueof<T>): valueof<T> {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.add<valueof<T>>(
@@ -32,8 +25,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function sub<T extends ArrayBufferView>(array: T, index: i32, value: valueof<T>): valueof<T> {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.sub<valueof<T>>(
@@ -42,8 +33,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function and<T extends ArrayBufferView>(array: T, index: i32, value: valueof<T>): valueof<T> {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.and<valueof<T>>(
@@ -52,8 +41,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function or<T extends ArrayBufferView>(array: T, index: i32, value: valueof<T>): valueof<T> {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.or<valueof<T>>(
@@ -62,8 +49,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function xor<T extends ArrayBufferView>(array: T, index: i32, value: valueof<T>): valueof<T> {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.xor<valueof<T>>(
@@ -72,8 +57,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function exchange<T extends ArrayBufferView>(array: T, index: i32, value: valueof<T>): valueof<T> {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.xchg<valueof<T>>(
@@ -82,8 +65,6 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function compareExchange<T extends ArrayBufferView>(
     array: T,
     index: i32,
@@ -98,14 +79,10 @@ export namespace Atomics {
     );
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function wait<T extends ArrayBufferView>(array: T, value: valueof<T>, timeout: i64 = -1): AtomicWaitResult {
     return atomic.wait<valueof<T>>(changetype<usize>(array.buffer) + array.byteOffset, value, timeout);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function notify<T extends ArrayBufferView>(array: T, index: i32, count: i32 = -1): i32 {
     if (index < 0 || (index << alignof<valueof<T>>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE);
     return atomic.notify(changetype<usize>(array.buffer) + (index << alignof<valueof<T>>()) + array.byteOffset, count);
diff --git a/std/assembly/date.ts b/std/assembly/date.ts
index b2e7eff65e..ac46f932f7 100644
--- a/std/assembly/date.ts
+++ b/std/assembly/date.ts
@@ -5,7 +5,7 @@ import {
 
 export class Date {
 
-  @inline static UTC(
+  static UTC(
     year: i32,
     month: i32 = 0,
     day: i32 = 1,
@@ -17,7 +17,7 @@ export class Date {
     return <i64>Date_UTC(year, month, day, hour, minute, second, <f64>millisecond);
   }
 
-  @inline static now(): i64 {
+  static now(): i64 {
     return <i64>Date_now();
   }
 
diff --git a/std/assembly/map.ts b/std/assembly/map.ts
index 0e82f9f96c..3e98eac034 100644
--- a/std/assembly/map.ts
+++ b/std/assembly/map.ts
@@ -44,7 +44,6 @@ const BUCKET_SIZE = sizeof<usize>();
 
 /** Computes the alignment of an entry. */
 // @ts-ignore: decorator
-@inline
 function ENTRY_ALIGN<K,V>(): usize {
   // can align to 4 instead of 8 if 32-bit and K/V is <= 32-bits
   const maxkv = sizeof<K>() > sizeof<V>() ? sizeof<K>() : sizeof<V>();
@@ -54,7 +53,6 @@ function ENTRY_ALIGN<K,V>(): usize {
 
 /** Computes the aligned size of an entry. */
 // @ts-ignore: decorator
-@inline
 function ENTRY_SIZE<K,V>(): usize {
   const align = ENTRY_ALIGN<K,V>();
   const size = (offsetof<MapEntry<K,V>>() + align) & ~align;
diff --git a/std/assembly/math.ts b/std/assembly/math.ts
index d2645c48ef..bfd1931737 100644
--- a/std/assembly/math.ts
+++ b/std/assembly/math.ts
@@ -65,8 +65,6 @@ function R(z: f64): f64 { // Rational approximation of (asin(x)-x)/x^3
 }
 
 /** @internal */
-// @ts-ignore: decorator
-@inline
 function expo2(x: f64): f64 { // exp(x)/2 for x >= log(DBL_MAX)
   const                       // see: musl/src/math/__expo2.c
     k    = <u32>2043,
@@ -83,8 +81,6 @@ function expo2(x: f64): f64 { // exp(x)/2 for x >= log(DBL_MAX)
  *
  * Right shift 11 bits to make upper half fit in `double`
  */
-// @ts-ignore: decorator
-@inline
 function pio2_right(q0: u64, q1: u64): u64 { // see: jdh8/metallic/blob/master/src/math/double/rem_pio2.c
   // Bits of π/4
   const p0: u64 = 0xC4C6628B80DC1CD1;
@@ -112,8 +108,6 @@ function pio2_right(q0: u64, q1: u64): u64 { // see: jdh8/metallic/blob/master/s
 }
 
 /** @internal */
-// @ts-ignore: decorator
-@inline
 function umuldi(u: u64, v: u64): u64 {
   var u1: u64 , v1: u64, w0: u64, w1: u64, t: u64;
 
@@ -189,8 +183,6 @@ function pio2_large_quot(x: f64, u: i64): i32 { // see: jdh8/metallic/blob/maste
 }
 
 /** @internal */
-// @ts-ignore: decorator
-@inline
 function rempio2(x: f64, u: u64, sign: i32): i32 {
   const pio2_1  = reinterpret<f64>(0x3FF921FB54400000); // 1.57079632673412561417e+00
   const pio2_1t = reinterpret<f64>(0x3DD0B4611A626331); // 6.07710050650619224932e-11
@@ -269,8 +261,6 @@ function rempio2(x: f64, u: u64, sign: i32): i32 {
 }
 
 /** @internal */
-// @ts-ignore: decorator
-@inline
 function sin_kern(x: f64, y: f64, iy: i32): f64 { // see: musl/tree/src/math/__sin.c
   const S1 = reinterpret<f64>(0xBFC5555555555549); // -1.66666666666666324348e-01
   const S2 = reinterpret<f64>(0x3F8111111110F8A6); //  8.33333333332248946124e-03
@@ -291,8 +281,6 @@ function sin_kern(x: f64, y: f64, iy: i32): f64 { // see: musl/tree/src/math/__s
 }
 
 /** @internal */
-// @ts-ignore: decorator
-@inline
 function cos_kern(x: f64, y: f64): f64 { // see: musl/tree/src/math/__cos.c
   const C1 = reinterpret<f64>(0x3FA555555555554C); //  4.16666666666666019037e-02
   const C2 = reinterpret<f64>(0xBF56C16C16C15177); // -1.38888888888741095749e-03
@@ -462,8 +450,7 @@ export namespace NativeMath {
   @lazy
   export var sincos_cos: f64 = 0;
 
-  // @ts-ignore: decorator
-  @inline export function abs(x: f64): f64 {
+  export function abs(x: f64): f64 {
     return builtin_abs<f64>(x);
   }
 
@@ -714,8 +701,6 @@ export namespace NativeMath {
     return t;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function ceil(x: f64): f64 {
     return builtin_ceil<f64>(x);
   }
@@ -893,14 +878,10 @@ export namespace NativeMath {
     return (x + y) * twopk;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function floor(x: f64): f64 {
     return builtin_floor<f64>(x);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function fround(x: f64): f64 {
     return <f32>x;
   }
@@ -1165,14 +1146,10 @@ export namespace NativeMath {
     }
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function max(value1: f64, value2: f64): f64 {
     return builtin_max<f64>(value1, value2);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function min(value1: f64, value2: f64): f64 {
     return builtin_min<f64>(value1, value2);
   }
@@ -1421,14 +1398,10 @@ export namespace NativeMath {
     return reinterpret<f64>(r) - 1;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function round(x: f64): f64 {
     return builtin_copysign<f64>(builtin_floor<f64>(x + 0.5), x);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function sign(x: f64): f64 {
     if (ASC_SHRINK_LEVEL > 0) {
       return builtin_abs(x) > 0 ? builtin_copysign<f64>(1, x) : x;
@@ -1437,8 +1410,6 @@ export namespace NativeMath {
     }
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function signbit(x: f64): bool {
     // In ECMAScript all NaN values are indistinguishable from each other
     // so we need handle NaN and negative NaN in similar way
@@ -1490,8 +1461,6 @@ export namespace NativeMath {
     return t;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function sqrt(x: f64): f64 {
     return builtin_sqrt<f64>(x);
   }
@@ -1541,8 +1510,6 @@ export namespace NativeMath {
     return builtin_copysign<f64>(t, x);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function trunc(x: f64): f64 {
     return builtin_trunc<f64>(x);
   }
@@ -1766,8 +1733,6 @@ function Rf(z: f32): f32 { // Rational approximation of (asin(x)-x)/x^3
   return p / q;
 }
 
-// @ts-ignore: decorator
-@inline
 function expo2f(x: f32): f32 { // exp(x)/2 for x >= log(DBL_MAX)
   const                                // see: musl/src/math/__expo2f.c
     k    = <u32>235,
@@ -1776,8 +1741,6 @@ function expo2f(x: f32): f32 { // exp(x)/2 for x >= log(DBL_MAX)
   return NativeMathf.exp(x - kln2) * scale * scale;
 }
 
-// @ts-ignore: decorator
-@inline
 function pio2f_large_quot(x: f32, u: i32): i32 { // see: jdh8/metallic/blob/master/src/math/float/rem_pio2f.c
   const coeff = reinterpret<f64>(0x3BF921FB54442D18); // π * 0x1p-65 = 8.51530395021638647334e-20
 
@@ -1806,8 +1769,6 @@ function pio2f_large_quot(x: f32, u: i32): i32 { // see: jdh8/metallic/blob/mast
   return q;
 }
 
-// @ts-ignore: decorator
-@inline
 function rempio2f(x: f32, u: u32, sign: i32): i32 { // see: jdh8/metallic/blob/master/src/math/float/rem_pio2f.c
   const pi2hi = reinterpret<f64>(0x3FF921FB50000000); // 1.57079631090164184570
   const pi2lo = reinterpret<f64>(0x3E5110B4611A6263); // 1.58932547735281966916e-8
@@ -1824,8 +1785,6 @@ function rempio2f(x: f32, u: u32, sign: i32): i32 { // see: jdh8/metallic/blob/m
 }
 
 // |sin(x)/x - s(x)| < 2**-37.5 (~[-4.89e-12, 4.824e-12]).
-// @ts-ignore: decorator
-@inline
 function sin_kernf(x: f64): f32 { // see: musl/tree/src/math/__sindf.c
   const S1 = reinterpret<f64>(0xBFC5555554CBAC77); // -0x15555554cbac77.0p-55
   const S2 = reinterpret<f64>(0x3F811110896EFBB2); //  0x111110896efbb2.0p-59
@@ -1840,8 +1799,6 @@ function sin_kernf(x: f64): f32 { // see: musl/tree/src/math/__sindf.c
 }
 
 // |cos(x) - c(x)| < 2**-34.1 (~[-5.37e-11, 5.295e-11]).
-// @ts-ignore: decorator
-@inline
 function cos_kernf(x: f64): f32 { // see: musl/tree/src/math/__cosdf.c
   const C0 = reinterpret<f64>(0xBFDFFFFFFD0C5E81); // -0x1ffffffd0c5e81.0p-54
   const C1 = reinterpret<f64>(0x3FA55553E1053A42); //  0x155553e1053a42.0p-57
@@ -1855,8 +1812,6 @@ function cos_kernf(x: f64): f32 { // see: musl/tree/src/math/__cosdf.c
 }
 
 // |tan(x)/x - t(x)| < 2**-25.5 (~[-2e-08, 2e-08]).
-// @ts-ignore: decorator
-@inline
 function tan_kernf(x: f64, odd: i32): f32 { // see: musl/tree/src/math/__tandf.c
 
   const T0 = reinterpret<f64>(0x3FD5554D3418C99F); // 0x15554d3418c99f.0p-54
@@ -1878,8 +1833,6 @@ function tan_kernf(x: f64, odd: i32): f32 { // see: musl/tree/src/math/__tandf.c
 }
 
 // See: jdh8/metallic/src/math/float/log2f.c and jdh8/metallic/src/math/float/kernel/atanh.h
-// @ts-ignore: decorator
-@inline
 function log2f(x: f64): f64 {
   const
     log2e = reinterpret<f64>(0x3FF71547652B82FE), // 1.44269504088896340736
@@ -1898,8 +1851,6 @@ function log2f(x: f64): f64 {
 }
 
 // See: jdh8/metallic/src/math/float/exp2f.h and jdh8/metallic/blob/master/src/math/float/kernel/exp2f.h
-// @ts-ignore: decorator
-@inline
 function exp2f(x: f64): f64 {
   const
     c0 = reinterpret<f64>(0x3FE62E4302FCC24A), // 6.931471880289532425e-1
@@ -1961,8 +1912,6 @@ export namespace NativeMathf {
   @lazy
   export var sincos_cos: f32 = 0;
 
-  // @ts-ignore: decorator
-  @inline
   export function abs(x: f32): f32 {
     return builtin_abs<f32>(x);
   }
@@ -2189,8 +2138,6 @@ export namespace NativeMathf {
     return <f32>t;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function ceil(x: f32): f32 {
     return builtin_ceil<f32>(x);
   }
@@ -2264,8 +2211,6 @@ export namespace NativeMathf {
     return expo2f(x);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function floor(x: f32): f32 {
     return builtin_floor<f32>(x);
   }
@@ -2384,8 +2329,6 @@ export namespace NativeMathf {
     return (x + y) * twopk;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function fround(x: f32): f32 {
     return x;
   }
@@ -2420,8 +2363,6 @@ export namespace NativeMathf {
     return z * builtin_sqrt<f32>(<f32>(<f64>x * x + <f64>y * y));
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function imul(x: f32, y: f32): f32 {
     /*
      * Wasm (MVP) and JS have different approaches for double->int conversions.
@@ -2604,14 +2545,10 @@ export namespace NativeMathf {
     }
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function max(value1: f32, value2: f32): f32 {
     return builtin_max<f32>(value1, value2);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function min(value1: f32, value2: f32): f32 {
     return builtin_min<f32>(value1, value2);
   }
@@ -2667,8 +2604,6 @@ export namespace NativeMathf {
     }
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function seedRandom(value: i64): void {
     NativeMath.seedRandom(value);
   }
@@ -2688,14 +2623,10 @@ export namespace NativeMathf {
     return reinterpret<f32>((r >> 9) | (127 << 23)) - 1.0;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function round(x: f32): f32 {
     return builtin_copysign<f32>(builtin_floor<f32>(x + 0.5), x);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function sign(x: f32): f32 {
     if (ASC_SHRINK_LEVEL > 0) {
       return builtin_abs(x) > 0 ? builtin_copysign<f32>(1, x) : x;
@@ -2704,8 +2635,6 @@ export namespace NativeMathf {
     }
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function signbit(x: f32): bool {
     // @ts-ignore: type
     return <bool>((reinterpret<u32>(x) >>> 31) & (x == x));
@@ -2771,8 +2700,6 @@ export namespace NativeMathf {
     return t;
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function sqrt(x: f32): f32 {
     return builtin_sqrt<f32>(x);
   }
@@ -2841,8 +2768,6 @@ export namespace NativeMathf {
     return builtin_copysign<f32>(t, x);
   }
 
-  // @ts-ignore: decorator
-  @inline
   export function trunc(x: f32): f32 {
     return builtin_trunc<f32>(x);
   }
diff --git a/std/assembly/memory.ts b/std/assembly/memory.ts
index a4111da292..b8da3f856f 100644
--- a/std/assembly/memory.ts
+++ b/std/assembly/memory.ts
@@ -55,8 +55,6 @@ export namespace memory {
   }
 
   /** Compares a section of memory to another. */
-  // @ts-ignore: decorator
-  @inline
   export function compare(vl: usize, vr: usize, n: usize): i32 {
     return memcmp(vl, vr, n);
   }
diff --git a/std/assembly/rt/tlsf.ts b/std/assembly/rt/tlsf.ts
index 2a71356ff3..9445151d43 100644
--- a/std/assembly/rt/tlsf.ts
+++ b/std/assembly/rt/tlsf.ts
@@ -90,14 +90,12 @@ import { REFCOUNT_MASK } from "./pure";
 // @inline const BLOCK_MAXSIZE: usize = 1 << (FL_BITS + SB_BITS - 1); // exclusive, lives in common.ts
 
 /** Gets the left block of a block. Only valid if the left block is free. */
-// @ts-ignore: decorator
-@inline function GETFREELEFT(block: Block): Block {
+function GETFREELEFT(block: Block): Block {
   return load<Block>(changetype<usize>(block) - sizeof<usize>());
 }
 
 /** Gets the right block of of a block by advancing to the right by its size. */
-// @ts-ignore: decorator
-@inline function GETRIGHT(block: Block): Block {
+function GETRIGHT(block: Block): Block {
   return changetype<Block>(changetype<usize>(block) + BLOCK_OVERHEAD + (block.mmInfo & ~TAGS_MASK));
 }
 
@@ -144,8 +142,7 @@ import { REFCOUNT_MASK } from "./pure";
 @lazy export var ROOT: Root;
 
 /** Gets the second level map of the specified first level. */
-// @ts-ignore: decorator
-@inline function GETSL(root: Root, fl: usize): u32 {
+function GETSL(root: Root, fl: usize): u32 {
   return load<u32>(
     changetype<usize>(root) + (fl << alignof<u32>()),
     SL_START
@@ -153,8 +150,7 @@ import { REFCOUNT_MASK } from "./pure";
 }
 
 /** Sets the second level map of the specified first level. */
-// @ts-ignore: decorator
-@inline function SETSL(root: Root, fl: usize, slMap: u32): void {
+function SETSL(root: Root, fl: usize, slMap: u32): void {
   store<u32>(
     changetype<usize>(root) + (fl << alignof<u32>()),
     slMap,
@@ -163,8 +159,7 @@ import { REFCOUNT_MASK } from "./pure";
 }
 
 /** Gets the head of the free list for the specified combination of first and second level. */
-// @ts-ignore: decorator
-@inline function GETHEAD(root: Root, fl: usize, sl: u32): Block | null {
+function GETHEAD(root: Root, fl: usize, sl: u32): Block | null {
   return load<Block>(
     changetype<usize>(root) + (((fl << SL_BITS) + <usize>sl) << alignof<usize>()),
     HL_START
@@ -172,8 +167,7 @@ import { REFCOUNT_MASK } from "./pure";
 }
 
 /** Sets the head of the free list for the specified combination of first and second level. */
-// @ts-ignore: decorator
-@inline function SETHEAD(root: Root, fl: usize, sl: u32, head: Block | null): void {
+function SETHEAD(root: Root, fl: usize, sl: u32, head: Block | null): void {
   store<Block>(
     changetype<usize>(root) + (((fl << SL_BITS) + <usize>sl) << alignof<usize>()),
     head,
@@ -182,8 +176,7 @@ import { REFCOUNT_MASK } from "./pure";
 }
 
 /** Gets the tail block.. */
-// @ts-ignore: decorator
-@inline function GETTAIL(root: Root): Block {
+function GETTAIL(root: Root): Block {
   return load<Block>(
     changetype<usize>(root),
     HL_END
@@ -191,8 +184,7 @@ import { REFCOUNT_MASK } from "./pure";
 }
 
 /** Sets the tail block. */
-// @ts-ignore: decorator
-@inline function SETTAIL(root: Root, tail: Block): void {
+function SETTAIL(root: Root, tail: Block): void {
   store<Block>(
     changetype<usize>(root),
     tail,
diff --git a/std/assembly/set.ts b/std/assembly/set.ts
index 17925f702b..e4b1143489 100644
--- a/std/assembly/set.ts
+++ b/std/assembly/set.ts
@@ -41,8 +41,6 @@ const EMPTY: usize = 1 << 0;
 const BUCKET_SIZE = sizeof<usize>();
 
 /** Computes the alignment of an entry. */
-// @ts-ignore: decorator
-@inline
 function ENTRY_ALIGN<T>(): usize {
   // can align to 4 instead of 8 if 32-bit and K is <= 32-bits
   const align = (sizeof<T>() > sizeof<usize>() ? sizeof<T>() : sizeof<usize>()) - 1;
@@ -50,8 +48,6 @@ function ENTRY_ALIGN<T>(): usize {
 }
 
 /** Computes the aligned size of an entry. */
-// @ts-ignore: decorator
-@inline
 function ENTRY_SIZE<T>(): usize {
   const align = ENTRY_ALIGN<T>();
   const size = (offsetof<SetEntry<T>>() + align) & ~align;
diff --git a/std/assembly/string.ts b/std/assembly/string.ts
index c5d245bcf1..f49f59bb07 100644
--- a/std/assembly/string.ts
+++ b/std/assembly/string.ts
@@ -237,12 +237,10 @@ import { Array } from "./array";
     return changetype<String>(out); // retains
   }
 
-  @inline
   trimLeft(): String {
     return this.trimStart();
   }
 
-  @inline
   trimRight(): String {
     return this.trimEnd();
   }
diff --git a/std/assembly/typedarray.ts b/std/assembly/typedarray.ts
index 947fbf917c..222e027af9 100644
--- a/std/assembly/typedarray.ts
+++ b/std/assembly/typedarray.ts
@@ -1412,8 +1412,6 @@ export class Float64Array extends ArrayBufferView {
   }
 }
 
-// @ts-ignore: decorator
-@inline
 function FILL<TArray extends ArrayBufferView, T extends number>(
   array: TArray,
   value: native<T>,
@@ -1434,8 +1432,6 @@ function FILL<TArray extends ArrayBufferView, T extends number>(
   return array;
 }
 
-// @ts-ignore: decorator
-@inline
 function SORT<TArray extends ArrayBufferView, T>(
   array: TArray,
   comparator: (a: T, b: T) => i32
@@ -1456,8 +1452,6 @@ function SORT<TArray extends ArrayBufferView, T>(
   return array;
 }
 
-// @ts-ignore: decorator
-@inline
 function SLICE<TArray extends ArrayBufferView, T>(
   array: TArray,
   start: i32,
@@ -1476,8 +1470,6 @@ function SLICE<TArray extends ArrayBufferView, T>(
   return slice;
 }
 
-// @ts-ignore: decorator
-@inline
 function SUBARRAY<TArray extends ArrayBufferView, T>(
   array: TArray,
   begin: i32,
@@ -1495,8 +1487,6 @@ function SUBARRAY<TArray extends ArrayBufferView, T>(
   return changetype<TArray>(out); // retains
 }
 
-// @ts-ignore: decorator
-@inline
 function COPY_WITHIN<TArray extends ArrayBufferView, T>(
   array: TArray,
   target: i32,
@@ -1520,8 +1510,6 @@ function COPY_WITHIN<TArray extends ArrayBufferView, T>(
   return array;
 }
 
-// @ts-ignore: decorator
-@inline
 function REDUCE<TArray extends ArrayBufferView, T, TRet>(
   array: TArray,
   fn: (accumulator: TRet, value: T, index: i32, array: TArray) => TRet,
@@ -1534,8 +1522,6 @@ function REDUCE<TArray extends ArrayBufferView, T, TRet>(
   return initialValue;
 }
 
-// @ts-ignore: decorator
-@inline
 function REDUCE_RIGHT<TArray extends ArrayBufferView, T, TRet>(
   array: TArray,
   fn: (accumulator: TRet, value: T, index: i32, array: TArray) => TRet,
@@ -1548,8 +1534,6 @@ function REDUCE_RIGHT<TArray extends ArrayBufferView, T, TRet>(
   return initialValue;
 }
 
-// @ts-ignore: decorator
-@inline
 function MAP<TArray extends ArrayBufferView, T>(
   array: TArray,
   fn: (value: T, index: i32, self: TArray) => T,
@@ -1572,8 +1556,6 @@ function MAP<TArray extends ArrayBufferView, T>(
   return changetype<TArray>(out); // retains
 }
 
-// @ts-ignore: decorator
-@inline
 function FILTER<TArray extends ArrayBufferView, T>(
   array: TArray,
   fn: (value: T, index: i32, self: TArray) => bool,
@@ -1601,8 +1583,6 @@ function FILTER<TArray extends ArrayBufferView, T>(
   return changetype<TArray>(out); // retains
 }
 
-// @ts-ignore: decorator
-@inline
 function FIND_INDEX<TArray extends ArrayBufferView, T>(
   array: TArray,
   fn: (value: T, index: i32, array: TArray) => bool,
@@ -1614,8 +1594,6 @@ function FIND_INDEX<TArray extends ArrayBufferView, T>(
   return -1;
 }
 
-// @ts-ignore: decorator
-@inline
 function INCLUDES<TArray extends ArrayBufferView, T>(
   array: TArray,
   searchElement: T,
@@ -1639,8 +1617,6 @@ function INCLUDES<TArray extends ArrayBufferView, T>(
   }
 }
 
-// @ts-ignore: decorator
-@inline
 function INDEX_OF<TArray extends ArrayBufferView, T>(
   array: TArray,
   searchElement: T,
@@ -1658,8 +1634,6 @@ function INDEX_OF<TArray extends ArrayBufferView, T>(
   return -1;
 }
 
-// @ts-ignore: decorator
-@inline
 function LAST_INDEX_OF<TArray extends ArrayBufferView, T>(
   array: TArray,
   searchElement: T,
@@ -1678,8 +1652,6 @@ function LAST_INDEX_OF<TArray extends ArrayBufferView, T>(
   return -1;
 }
 
-// @ts-ignore: decorator
-@inline
 function SOME<TArray extends ArrayBufferView, T>(
   array: TArray,
   fn: (value: T, index: i32, array: TArray) => bool,
@@ -1691,8 +1663,6 @@ function SOME<TArray extends ArrayBufferView, T>(
   return false;
 }
 
-// @ts-ignore: decorator
-@inline
 function EVERY<TArray extends ArrayBufferView, T>(
   array: TArray,
   fn: (value: T, index: i32, array: TArray) => bool,
@@ -1705,8 +1675,6 @@ function EVERY<TArray extends ArrayBufferView, T>(
   return true;
 }
 
-// @ts-ignore: decorator
-@inline
 function FOREACH<TArray extends ArrayBufferView, T>(
   array: TArray,
   fn: (value: T, index: i32, array: TArray) => void,
@@ -1717,8 +1685,6 @@ function FOREACH<TArray extends ArrayBufferView, T>(
   }
 }
 
-// @ts-ignore: decorator
-@inline
 function REVERSE<TArray extends ArrayBufferView, T>(array: TArray): TArray {
   var dataStart = array.dataStart;
   for (let front: usize = 0, back: usize = array.length - 1; front < back; ++front, --back) {
@@ -1731,8 +1697,6 @@ function REVERSE<TArray extends ArrayBufferView, T>(array: TArray): TArray {
   return array;
 }
 
-// @ts-ignore: decorator
-@inline
 function WRAP<TArray extends ArrayBufferView, T>(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): TArray {
   var byteLength: i32;
   var bufferByteLength = buffer.byteLength;
@@ -1762,8 +1726,6 @@ function WRAP<TArray extends ArrayBufferView, T>(buffer: ArrayBuffer, byteOffset
   return changetype<TArray>(out); // retains
 }
 
-// @ts-ignore: decorator
-@inline
 function SET<TArray extends ArrayBufferView, T, UArray extends ArrayBufferView, U>(target: TArray, source: UArray, offset: i32 = 0): void {
   // need to assert at compile time that U is not a reference or a function
   if (isReference<U>()) {
diff --git a/std/assembly/util/casemap.ts b/std/assembly/util/casemap.ts
index 11bddff6a7..192238025b 100644
--- a/std/assembly/util/casemap.ts
+++ b/std/assembly/util/casemap.ts
@@ -436,8 +436,6 @@ const MT = memory.data<i32>([
 ]);
 
 // Special binary search routine for Special Casing Tables
-// @ts-ignore: decorator
-@inline
 export function bsearch(key: u32, ptr: usize, max: i32): i32 {
   var min = 0;
   while (min <= max) {
diff --git a/std/assembly/util/hash.ts b/std/assembly/util/hash.ts
index 2d58d92909..5ba52e114b 100644
--- a/std/assembly/util/hash.ts
+++ b/std/assembly/util/hash.ts
@@ -1,5 +1,4 @@
-// @ts-ignore: decorator
-@inline
+
 export function HASH<T>(key: T): u32 {
   if (isString<T>()) {
     return hashStr(changetype<string>(key));
diff --git a/std/assembly/util/math.ts b/std/assembly/util/math.ts
index e345bbb7a6..3c68c1a4c9 100644
--- a/std/assembly/util/math.ts
+++ b/std/assembly/util/math.ts
@@ -25,8 +25,6 @@ const EXP2F_DATA_TAB = memory.data<u64>([
 // ULP error: 0.502 (nearest rounding.)
 // Relative error: 1.69 * 2^-34 in [-1/64, 1/64] (before rounding.)
 // Wrong count: 168353 (all nearest rounding wrong results with fma.)
-// @ts-ignore: decorator
-@inline
 export function exp2f_lut(x: f32): f32 {
   const
     N      = 1 << EXP2F_TABLE_BITS,
@@ -70,8 +68,6 @@ export function exp2f_lut(x: f32): f32 {
 // ULP error: 0.502 (nearest rounding.)
 // Relative error: 1.69 * 2^-34 in [-ln2/64, ln2/64] (before rounding.)
 // Wrong count: 170635 (all nearest rounding wrong results with fma.)
-// @ts-ignore: decorator
-@inline
 export function expf_lut(x: f32): f32 {
   const
     N        = 1 << EXP2F_TABLE_BITS,
@@ -150,8 +146,6 @@ const LOG2F_DATA_TAB = memory.data<f64>([
 
 // ULP error: 0.752 (nearest rounding.)
 // Relative error: 1.9 * 2^-26 (before rounding.)
-// @ts-ignore: decorator
-@inline
 export function log2f_lut(x: f32): f32 {
   const
     N_MASK  = (1 << LOG2F_TABLE_BITS) - 1,
@@ -233,8 +227,6 @@ const LOGF_DATA_TAB = memory.data<f64>([
 
 // ULP error: 0.818 (nearest rounding.)
 // Relative error: 1.957 * 2^-26 (before rounding.)
-// @ts-ignore: decorator
-@inline
 export function logf_lut(x: f32): f32 {
   const
     N_MASK  = (1 << LOGF_TABLE_BITS) - 1,
@@ -288,16 +280,12 @@ export function logf_lut(x: f32): f32 {
 // Lookup data for powf. See: https://git.musl-libc.org/cgit/musl/tree/src/math/powf.c
 //
 
-// @ts-ignore: decorator
-@inline
 function zeroinfnanf(ux: u32): bool {
   return (ux << 1) - 1 >= (<u32>0x7f800000 << 1) - 1;
 }
 
 // Returns 0 if not int, 1 if odd int, 2 if even int. The argument is
 // the bit representation of a non-zero finite floating-point value.
-// @ts-ignore: decorator
-@inline
 function checkintf(iy: u32): i32 {
   var e = iy >> 23 & 0xFF;
   if (e < 0x7F     ) return 0;
@@ -310,8 +298,6 @@ function checkintf(iy: u32): i32 {
 
 // Subnormal input is normalized so ix has negative biased exponent.
 // Output is multiplied by N (POWF_SCALE) if TOINT_INTRINICS is set.
-// @ts-ignore: decorator
-@inline
 function log2f_inline(ux: u32): f64 {
   const N_MASK = (1 << LOG2F_TABLE_BITS) - 1;
 
@@ -354,8 +340,6 @@ function log2f_inline(ux: u32): f64 {
 // The output of log2 and thus the input of exp2 is either scaled by N
 // (in case of fast toint intrinsics) or not.  The unscaled xd must be
 // in [-1021,1023], sign_bias sets the sign of the result.
-// @ts-ignore: decorator
-@inline
 function exp2f_inline(xd: f64, signBias: u32): f32 {
   const
     N      = 1 << EXP2F_TABLE_BITS,
@@ -384,26 +368,18 @@ function exp2f_inline(xd: f64, signBias: u32): f32 {
   return <f32>y;
 }
 
-// @ts-ignore: decorator
-@inline
 function xflowf(sign: u32, y: f32): f32 {
   return select<f32>(-y, y, sign) * y;
 }
 
-// @ts-ignore: decorator
-@inline
 function oflowf(sign: u32): f32 {
   return xflowf(sign, reinterpret<f32>(0x70000000)); // 0x1p97f
 }
 
-// @ts-ignore: decorator
-@inline
 function uflowf(sign: u32): f32 {
   return xflowf(sign, reinterpret<f32>(0x10000000)); // 0x1p-95f
 }
 
-// @ts-ignore: decorator
-@inline
 export function powf_lut(x: f32, y: f32): f32 {
   const
     Ox1p23f     = reinterpret<f32>(0x4B000000), // 0x1p23f
@@ -604,8 +580,6 @@ const EXP_DATA_TAB = memory.data<u64>([
 // a double.  (int32_t)KI is the k used in the argument reduction and exponent
 // adjustment of scale, positive k here means the result may overflow and
 // negative k means the result may underflow.
-// @ts-ignore: decorator
-@inline
 function specialcase(tmp: f64, sbits: u64, ki: u64): f64 {
   const
     Ox1p_1022 = reinterpret<f64>(0x0010000000000000), // 0x1p-1022
@@ -639,8 +613,6 @@ function specialcase(tmp: f64, sbits: u64, ki: u64): f64 {
   return y * Ox1p_1022;
 }
 
-// @ts-ignore: decorator
-@inline
 export function exp_lut(x: f64): f64 {
   const
     N      = 1 << EXP_TABLE_BITS,
@@ -720,8 +692,6 @@ export function exp_lut(x: f64): f64 {
 // a double.  (int32_t)KI is the k used in the argument reduction and exponent
 // adjustment of scale, positive k here means the result may overflow and
 // negative k means the result may underflow.
-// @ts-ignore: decorator
-@inline
 function specialcase2(tmp: f64, sbits: u64, ki: u64): f64 {
   const Ox1p_1022 = reinterpret<f64>(0x10000000000000); // 0x1p-1022
   var scale: f64;
@@ -749,8 +719,6 @@ function specialcase2(tmp: f64, sbits: u64, ki: u64): f64 {
   return y * Ox1p_1022;
 }
 
-// @ts-ignore: decorator
-@inline
 export function exp2_lut(x: f64): f64 {
   const
     N      = 1 << EXP_TABLE_BITS,
@@ -978,8 +946,6 @@ const LOG2_DATA_TAB2 = memory.data<f64>([
   reinterpret<f64>(0x3FF5DFFFEBFC3481), reinterpret<f64>(0xBC9180902E30E93E)
 ]);
 
-// @ts-ignore: decorator
-@inline
 export function log2_lut(x: f64): f64 {
   const N_MASK = (1 << LOG2_TABLE_BITS) - 1;
 
@@ -1394,8 +1360,6 @@ const LOG_DATA_TAB2 = memory.data<f64>([
   reinterpret<f64>(0x3FF5EFFFE7B87A89), reinterpret<f64>(0xBC947EB780ED6904)
 ]);
 
-// @ts-ignore: decorator
-@inline
 export function log_lut(x: f64): f64 {
   const N_MASK = (1 << LOG_TABLE_BITS) - 1;
 
@@ -1665,8 +1629,6 @@ const POW_LOG_DATA_TAB = memory.data<f64>([
 
 // Returns 0 if not int, 1 if odd int, 2 if even int. The argument is
 // the bit representation of a non-zero finite floating-point value.
-// @ts-ignore: decorator
-@inline
 function checkint(iy: u64): i32 {
   var e = iy >> 52 & 0x7FF;
   if (e < 0x3FF     ) return 0;
@@ -1677,27 +1639,19 @@ function checkint(iy: u64): i32 {
   return 2;
 }
 
-// @ts-ignore: decorator
-@inline
 function xflow(sign: u32, y: f64): f64 {
   return select(-y, y, sign) * y;
 }
 
-// @ts-ignore: decorator
-@inline
 function uflow(sign: u32): f64 {
   return xflow(sign, reinterpret<f64>(0x1000000000000000)); // 0x1p-767
 }
 
-// @ts-ignore: decorator
-@inline
 function oflow(sign: u32): f64 {
   return xflow(sign, reinterpret<f64>(0x7000000000000000)); // 0x1p769
 }
 
 // Returns 1 if input is the bit representation of 0, infinity or nan.
-// @ts-ignore: decorator
-@inline
 function zeroinfnan(u: u64): bool {
   return (u << 1) - 1 >= 0xFFE0000000000000 - 1;
 }
@@ -1709,8 +1663,6 @@ var log_tail: f64 = 0;
 // Compute y+TAIL = log(x) where the rounded result is y and TAIL has about
 // additional 15 bits precision. IX is the bit representation of x, but
 // normalized in the subnormal range using the sign bit for the exponent.
-// @ts-ignore: decorator
-@inline
 function log_inline(ix: u64): f64 {
   const N = 1 << POW_LOG_TABLE_BITS;
   const N_MASK = N - 1;
@@ -1784,8 +1736,6 @@ const SIGN_BIAS = 0x800 << EXP_TABLE_BITS;
 
 // Computes sign*exp(x+xtail) where |xtail| < 2^-8/N and |xtail| <= |x|.
 // The sign_bias argument is SIGN_BIAS or 0 and sets the sign to -1 or 1.
-// @ts-ignore: decorator
-@inline
 function exp_inline(x: f64, xtail: f64, sign_bias: u32): f64 {
   const N      = 1 << EXP_TABLE_BITS;
   const N_MASK = N - 1;
@@ -1865,8 +1815,6 @@ function exp_inline(x: f64, xtail: f64, sign_bias: u32): f64 {
   return scale + scale * tmp;
 }
 
-// @ts-ignore: decorator
-@inline
 export function pow_lut(x: f64, y: f64): f64 {
   const Ox1p52 = reinterpret<f64>(0x4330000000000000); // 0x1p52
 
diff --git a/std/assembly/util/memory.ts b/std/assembly/util/memory.ts
index d5daa5f526..e08aa56c34 100644
--- a/std/assembly/util/memory.ts
+++ b/std/assembly/util/memory.ts
@@ -141,8 +141,6 @@ export function memcpy(dest: usize, src: usize, n: usize): void { // see: musl/s
   }
 }
 
-// @ts-ignore: decorator
-@inline
 export function memmove(dest: usize, src: usize, n: usize): void { // see: musl/src/string/memmove.c
   if (dest === src) return;
   if (ASC_SHRINK_LEVEL < 1) {
@@ -190,8 +188,6 @@ export function memmove(dest: usize, src: usize, n: usize): void { // see: musl/
   }
 }
 
-// @ts-ignore: decorator
-@inline
 export function memset(dest: usize, c: u8, n: usize): void { // see: musl/src/string/memset
   if (ASC_SHRINK_LEVEL > 1) {
     while (n) {
@@ -259,8 +255,6 @@ export function memset(dest: usize, c: u8, n: usize): void { // see: musl/src/st
   }
 }
 
-// @ts-ignore: decorator
-@inline
 export function memcmp(vl: usize, vr: usize, n: usize): i32 {
   if (vl == vr) return 0;
   if (ASC_SHRINK_LEVEL < 2) {
diff --git a/std/assembly/util/number.ts b/std/assembly/util/number.ts
index b306fbd6c0..3f84fee2b7 100644
--- a/std/assembly/util/number.ts
+++ b/std/assembly/util/number.ts
@@ -216,8 +216,6 @@ function utoa_simple<T extends number>(buffer: usize, num: T, offset: usize): vo
   } while (num);
 }
 
-// @ts-ignore: decorator
-@inline
 export function utoa32_core(buffer: usize, num: u32, offset: u32): void {
   if (ASC_SHRINK_LEVEL >= 1) {
     utoa_simple(buffer, num, offset);
@@ -226,8 +224,6 @@ export function utoa32_core(buffer: usize, num: u32, offset: u32): void {
   }
 }
 
-// @ts-ignore: decorator
-@inline
 export function utoa64_core(buffer: usize, num: u64, offset: u32): void {
   if (ASC_SHRINK_LEVEL >= 1) {
     utoa_simple(buffer, num, offset);
@@ -343,8 +339,6 @@ var _frc_pow: u64 = 0;
 @lazy
 var _exp_pow: i32 = 0;
 
-// @ts-ignore: decorator
-@inline
 function umul64f(u: u64, v: u64): u64 {
   var u0 = u & 0xFFFFFFFF;
   var v0 = v & 0xFFFFFFFF;
@@ -364,14 +358,10 @@ function umul64f(u: u64, v: u64): u64 {
   return u1 * v1 + t + w;
 }
 
-// @ts-ignore: decorator
-@inline
 function umul64e(e1: i32, e2: i32): i32 {
   return e1 + e2 + 64; // where 64 is significand size
 }
 
-// @ts-ignore: decorator
-@inline
 function normalizedBoundaries(f: u64, e: i32): void {
   var frc = (f << 1) + 1;
   var exp = e - 1;
@@ -386,8 +376,6 @@ function normalizedBoundaries(f: u64, e: i32): void {
   _exp = exp;
 }
 
-// @ts-ignore: decorator
-@inline
 function grisuRound(buffer: usize, len: i32, delta: u64, rest: u64, ten_kappa: u64, wp_w: u64): void {
   var lastp = buffer + ((len - 1) << 1);
   var digit = load<u16>(lastp);
@@ -404,8 +392,6 @@ function grisuRound(buffer: usize, len: i32, delta: u64, rest: u64, ten_kappa: u
   store<u16>(lastp, digit);
 }
 
-// @ts-ignore: decorator
-@inline
 function getCachedPower(minExp: i32): void {
   const c = reinterpret<f64>(0x3FD34413509F79FE); // 1 / lg(10) = 0.30102999566398114
   var dk = (-61 - minExp) * c + 347;	            // dk must be positive, so can do ceiling in positive
@@ -418,8 +404,6 @@ function getCachedPower(minExp: i32): void {
   _exp_pow = load<i16>(EXP_POWERS + (<usize>index << alignof<i16>()));
 }
 
-// @ts-ignore: decorator
-@inline
 function grisu2(value: f64, buffer: usize, sign: i32): i32 {
 
   // frexp routine
@@ -511,8 +495,6 @@ function genDigits(buffer: usize, w_frc: u64, w_exp: i32, mp_frc: u64, mp_exp: i
   }
 }
 
-// @ts-ignore: decorator
-@inline
 function genExponent(buffer: usize, k: i32): i32 {
   var sign = k < 0;
   if (sign) k = -k;
diff --git a/std/assembly/util/sort.ts b/std/assembly/util/sort.ts
index 3ab895b259..48a242a8a9 100644
--- a/std/assembly/util/sort.ts
+++ b/std/assembly/util/sort.ts
@@ -1,7 +1,5 @@
 import { compareImpl } from "./string";
 
-// @ts-ignore: decorator
-@inline
 export function COMPARATOR<T>(): (a: T, b: T) => i32 {
   if (isInteger<T>()) {
     if (isSigned<T>() && sizeof<T>() <= 4) {
@@ -42,8 +40,6 @@ export function COMPARATOR<T>(): (a: T, b: T) => i32 {
   }
 }
 
-// @ts-ignore: decorator
-@inline
 export function SORT<T>(
   dataStart: usize,
   length: i32,
diff --git a/std/assembly/util/string.ts b/std/assembly/util/string.ts
index 157a5d3f73..122681efdb 100644
--- a/std/assembly/util/string.ts
+++ b/std/assembly/util/string.ts
@@ -494,20 +494,14 @@ export const enum CharCode {
   z = 0x7A
 }
 
-// @ts-ignore: decorator
-@inline
 export function isAscii(c: u32): bool {
   return !(c >> 7);
 }
 
-// @ts-ignore: decorator
-@inline
 export function isLower8(c: u32): bool {
   return c - CharCode.a < 26;
 }
 
-// @ts-ignore: decorator
-@inline
 export function isUpper8(c: u32): bool {
   return c - CharCode.A < 26;
 }
@@ -541,22 +535,16 @@ export function isAlpha(c: u32): bool {
   return c < 0x2FFFE;
 }
 
-// @ts-ignore: decorator
-@inline
 export function isCased(c: u32): bool {
   // @ts-ignore: cast
   return c < 0x1F18A && stagedBinaryLookup(CASED, c);
 }
 
-// @ts-ignore: decorator
-@inline
 export function isCaseIgnorable(c: u32): bool {
   // @ts-ignore: cast
   return c < 0xE01F0 && stagedBinaryLookup(CASE_IGNORABLES, c);
 }
 
-// @ts-ignore: decorator
-@inline
 export function isFinalSigma(buffer: usize, index: isize, len: isize): bool {
   const lookaheadLimit = 30; // max lookahead limit
   var found = false;
@@ -592,8 +580,6 @@ export function isFinalSigma(buffer: usize, index: isize, len: isize): bool {
   return true;
 }
 
-// @ts-ignore: decorator
-@inline
 function codePointBefore(buffer: usize, index: isize): i32 {
   if (index <= 0) return -1;
   var c = <u32>load<u16>(buffer + (index - 1 << 1));
@@ -634,8 +620,6 @@ export function compareImpl(str1: string, index1: usize, str2: string, index2: u
   return 0;
 }
 
-// @ts-ignore: decorator
-@inline
 export function toLower8(c: u32): u32 {
   if (ASC_SHRINK_LEVEL > 0) {
     return c | u32(isUpper8(c)) << 5;
@@ -644,8 +628,6 @@ export function toLower8(c: u32): u32 {
   }
 }
 
-// @ts-ignore: decorator
-@inline
 export function toUpper8(c: u32): u32 {
   if (ASC_SHRINK_LEVEL > 0) {
     return c & ~(u32(isLower8(c)) << 5);
@@ -1005,8 +987,6 @@ export function joinReferenceArray<T>(dataStart: usize, length: i32, separator:
   return result;
 }
 
-// @ts-ignore: decorator
-@inline
 function scientific(significand: u64, exp: i32): f64 {
   if (!significand || exp < -342) return 0;
   if (exp > 308) return Infinity;
@@ -1032,8 +1012,6 @@ function scientific(significand: u64, exp: i32): f64 {
 
 // Adopted from metallic lib:
 // https://github.com/jdh8/metallic/blob/master/src/stdlib/parse/scientific.h
-// @ts-ignore: decorator
-@inline
 function scaledown(significand: u64, exp: i32): f64 {
   const denom: u64 = 6103515625; // 1e14 * 0x1p-14
   const scale = reinterpret<f64>(0x3F06849B86A12B9B); // 1e-14 * 0x1p32
@@ -1061,8 +1039,6 @@ function scaledown(significand: u64, exp: i32): f64 {
 
 // Adopted from metallic lib:
 // https://github.com/jdh8/metallic/blob/master/src/stdlib/parse/scientific.h
-// @ts-ignore: decorator
-@inline
 function scaleup(significand: u64, exp: i32): f64 {
   const coeff: u32 = 1220703125; // 1e13 * 0x1p-13;
   var shift = ctz(significand);
@@ -1080,8 +1056,6 @@ function scaleup(significand: u64, exp: i32): f64 {
 
 // Adopted from metallic lib:
 // https://github.com/jdh8/metallic/blob/master/src/stdlib/parse/scientific.h
-// @ts-ignore: decorator
-@inline
 function parseExp(ptr: usize, len: i32): i32 {
   var sign = 1, magnitude = 0;
   var code = <u32>load<u16>(ptr);
@@ -1117,8 +1091,6 @@ var __fixmulShift: u64 = 0;
 
 // Adopted from metallic lib:
 // https://github.com/jdh8/metallic/blob/master/src/stdlib/parse/scientific.h
-// @ts-ignore: decorator
-@inline
 function fixmul(a: u64, b: u32): u64 {
   var low  = (a & 0xFFFFFFFF) * b;
   var high = (a >> 32) * b + (low >> 32);
@@ -1129,8 +1101,6 @@ function fixmul(a: u64, b: u32): u64 {
   return (high << space | (low & 0xFFFFFFFF) >> revspace) + (low << space >> 31 & 1);
 }
 
-// @ts-ignore: decorator
-@inline
 function pow10(n: i32): f64 {
   // argument `n` should bounds in [0, 22] range
   return load<f64>(POWERS10 + (n << alignof<f64>()));
diff --git a/tests/compiler/assert-nonnull.optimized.wat b/tests/compiler/assert-nonnull.optimized.wat
index c72cde40e7..7422e8e1e5 100644
--- a/tests/compiler/assert-nonnull.optimized.wat
+++ b/tests/compiler/assert-nonnull.optimized.wat
@@ -140,9 +140,10 @@
   (local $1 i32)
   block $folding-inner0
    local.get $0
+   local.tee $1
    i32.eqz
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    call $~lib/array/Array<assert-nonnull/Foo | null>#__get
    local.tee $0
    local.get $0
@@ -166,9 +167,10 @@
   (local $1 i32)
   block $folding-inner0
    local.get $0
+   local.tee $1
    i32.eqz
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    call $~lib/array/Array<assert-nonnull/Foo | null>#__get
    local.tee $0
    local.get $0
diff --git a/tests/compiler/binary.untouched.wat b/tests/compiler/binary.untouched.wat
index 75abfb6ac0..d7c2d8da91 100644
--- a/tests/compiler/binary.untouched.wat
+++ b/tests/compiler/binary.untouched.wat
@@ -1,7 +1,17 @@
 (module
- (type $none_=>_none (func))
  (type $f32_f32_=>_f32 (func (param f32 f32) (result f32)))
+ (type $i32_=>_f64 (func (param i32) (result f64)))
  (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
+ (type $none_=>_none (func))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_=>_f32 (func (param i32) (result f32)))
+ (type $i32_f32_=>_f32 (func (param i32 f32) (result f32)))
+ (type $f64_i32_=>_f32 (func (param f64 i32) (result f32)))
+ (type $i32_f64_=>_f64 (func (param i32 f64) (result f64)))
+ (type $i64_=>_f64 (func (param i64) (result f64)))
+ (type $f64_i64_i64_=>_f64 (func (param f64 i64 i64) (result f64)))
+ (type $f64_f64_i32_=>_f64 (func (param f64 f64 i32) (result f64)))
  (memory $0 1)
  (data (i32.const 8) "\00\00\00\00\00\a0\f6?\00\00\00\00\00\00\00\00\00\c8\b9\f2\82,\d6\bf\80V7($\b4\fa<\00\00\00\00\00\80\f6?\00\00\00\00\00\00\00\00\00\08X\bf\bd\d1\d5\bf \f7\e0\d8\08\a5\1c\bd\00\00\00\00\00`\f6?\00\00\00\00\00\00\00\00\00XE\17wv\d5\bfmP\b6\d5\a4b#\bd\00\00\00\00\00@\f6?\00\00\00\00\00\00\00\00\00\f8-\87\ad\1a\d5\bf\d5g\b0\9e\e4\84\e6\bc\00\00\00\00\00 \f6?\00\00\00\00\00\00\00\00\00xw\95_\be\d4\bf\e0>)\93i\1b\04\bd\00\00\00\00\00\00\f6?\00\00\00\00\00\00\00\00\00`\1c\c2\8ba\d4\bf\cc\84LH/\d8\13=\00\00\00\00\00\e0\f5?\00\00\00\00\00\00\00\00\00\a8\86\860\04\d4\bf:\0b\82\ed\f3B\dc<\00\00\00\00\00\c0\f5?\00\00\00\00\00\00\00\00\00HiUL\a6\d3\bf`\94Q\86\c6\b1 =\00\00\00\00\00\a0\f5?\00\00\00\00\00\00\00\00\00\80\98\9a\ddG\d3\bf\92\80\c5\d4MY%=\00\00\00\00\00\80\f5?\00\00\00\00\00\00\00\00\00 \e1\ba\e2\e8\d2\bf\d8+\b7\99\1e{&=\00\00\00\00\00`\f5?\00\00\00\00\00\00\00\00\00\88\de\13Z\89\d2\bf?\b0\cf\b6\14\ca\15=\00\00\00\00\00`\f5?\00\00\00\00\00\00\00\00\00\88\de\13Z\89\d2\bf?\b0\cf\b6\14\ca\15=\00\00\00\00\00@\f5?\00\00\00\00\00\00\00\00\00x\cf\fbA)\d2\bfv\daS($Z\16\bd\00\00\00\00\00 \f5?\00\00\00\00\00\00\00\00\00\98i\c1\98\c8\d1\bf\04T\e7h\bc\af\1f\bd\00\00\00\00\00\00\f5?\00\00\00\00\00\00\00\00\00\a8\ab\ab\\g\d1\bf\f0\a8\823\c6\1f\1f=\00\00\00\00\00\e0\f4?\00\00\00\00\00\00\00\00\00H\ae\f9\8b\05\d1\bffZ\05\fd\c4\a8&\bd\00\00\00\00\00\c0\f4?\00\00\00\00\00\00\00\00\00\90s\e2$\a3\d0\bf\0e\03\f4~\eek\0c\bd\00\00\00\00\00\a0\f4?\00\00\00\00\00\00\00\00\00\d0\b4\94%@\d0\bf\7f-\f4\9e\b86\f0\bc\00\00\00\00\00\a0\f4?\00\00\00\00\00\00\00\00\00\d0\b4\94%@\d0\bf\7f-\f4\9e\b86\f0\bc\00\00\00\00\00\80\f4?\00\00\00\00\00\00\00\00\00@^m\18\b9\cf\bf\87<\99\ab*W\0d=\00\00\00\00\00`\f4?\00\00\00\00\00\00\00\00\00`\dc\cb\ad\f0\ce\bf$\af\86\9c\b7&+=\00\00\00\00\00@\f4?\00\00\00\00\00\00\00\00\00\f0*n\07\'\ce\bf\10\ff?TO/\17\bd\00\00\00\00\00 \f4?\00\00\00\00\00\00\00\00\00\c0Ok!\\\cd\bf\1bh\ca\bb\91\ba!=\00\00\00\00\00\00\f4?\00\00\00\00\00\00\00\00\00\a0\9a\c7\f7\8f\cc\bf4\84\9fhOy\'=\00\00\00\00\00\00\f4?\00\00\00\00\00\00\00\00\00\a0\9a\c7\f7\8f\cc\bf4\84\9fhOy\'=\00\00\00\00\00\e0\f3?\00\00\00\00\00\00\00\00\00\90-t\86\c2\cb\bf\8f\b7\8b1\b0N\19=\00\00\00\00\00\c0\f3?\00\00\00\00\00\00\00\00\00\c0\80N\c9\f3\ca\bff\90\cd?cN\ba<\00\00\00\00\00\a0\f3?\00\00\00\00\00\00\00\00\00\b0\e2\1f\bc#\ca\bf\ea\c1F\dcd\8c%\bd\00\00\00\00\00\a0\f3?\00\00\00\00\00\00\00\00\00\b0\e2\1f\bc#\ca\bf\ea\c1F\dcd\8c%\bd\00\00\00\00\00\80\f3?\00\00\00\00\00\00\00\00\00P\f4\9cZR\c9\bf\e3\d4\c1\04\d9\d1*\bd\00\00\00\00\00`\f3?\00\00\00\00\00\00\00\00\00\d0 e\a0\7f\c8\bf\t\fa\db\7f\bf\bd+=\00\00\00\00\00@\f3?\00\00\00\00\00\00\00\00\00\e0\10\02\89\ab\c7\bfXJSr\90\db+=\00\00\00\00\00@\f3?\00\00\00\00\00\00\00\00\00\e0\10\02\89\ab\c7\bfXJSr\90\db+=\00\00\00\00\00 \f3?\00\00\00\00\00\00\00\00\00\d0\19\e7\0f\d6\c6\bff\e2\b2\a3j\e4\10\bd\00\00\00\00\00\00\f3?\00\00\00\00\00\00\00\00\00\90\a7p0\ff\c5\bf9P\10\9fC\9e\1e\bd\00\00\00\00\00\00\f3?\00\00\00\00\00\00\00\00\00\90\a7p0\ff\c5\bf9P\10\9fC\9e\1e\bd\00\00\00\00\00\e0\f2?\00\00\00\00\00\00\00\00\00\b0\a1\e3\e5&\c5\bf\8f[\07\90\8b\de \bd\00\00\00\00\00\c0\f2?\00\00\00\00\00\00\00\00\00\80\cbl+M\c4\bf<x5a\c1\0c\17=\00\00\00\00\00\c0\f2?\00\00\00\00\00\00\00\00\00\80\cbl+M\c4\bf<x5a\c1\0c\17=\00\00\00\00\00\a0\f2?\00\00\00\00\00\00\00\00\00\90\1e \fcq\c3\bf:T\'M\86x\f1<\00\00\00\00\00\80\f2?\00\00\00\00\00\00\00\00\00\f0\1f\f8R\95\c2\bf\08\c4q\170\8d$\bd\00\00\00\00\00`\f2?\00\00\00\00\00\00\00\00\00`/\d5*\b7\c1\bf\96\a3\11\18\a4\80.\bd\00\00\00\00\00`\f2?\00\00\00\00\00\00\00\00\00`/\d5*\b7\c1\bf\96\a3\11\18\a4\80.\bd\00\00\00\00\00@\f2?\00\00\00\00\00\00\00\00\00\90\d0|~\d7\c0\bf\f4[\e8\88\96i\n=\00\00\00\00\00@\f2?\00\00\00\00\00\00\00\00\00\90\d0|~\d7\c0\bf\f4[\e8\88\96i\n=\00\00\00\00\00 \f2?\00\00\00\00\00\00\00\00\00\e0\db1\91\ec\bf\bf\f23\a3\\Tu%\bd\00\00\00\00\00\00\f2?\00\00\00\00\00\00\00\00\00\00+n\07\'\be\bf<\00\f0*,4*=\00\00\00\00\00\00\f2?\00\00\00\00\00\00\00\00\00\00+n\07\'\be\bf<\00\f0*,4*=\00\00\00\00\00\e0\f1?\00\00\00\00\00\00\00\00\00\c0[\8fT^\bc\bf\06\be_XW\0c\1d\bd\00\00\00\00\00\c0\f1?\00\00\00\00\00\00\00\00\00\e0J:m\92\ba\bf\c8\aa[\e859%=\00\00\00\00\00\c0\f1?\00\00\00\00\00\00\00\00\00\e0J:m\92\ba\bf\c8\aa[\e859%=\00\00\00\00\00\a0\f1?\00\00\00\00\00\00\00\00\00\a01\d6E\c3\b8\bfhV/M)|\13=\00\00\00\00\00\a0\f1?\00\00\00\00\00\00\00\00\00\a01\d6E\c3\b8\bfhV/M)|\13=\00\00\00\00\00\80\f1?\00\00\00\00\00\00\00\00\00`\e5\8a\d2\f0\b6\bf\das3\c97\97&\bd\00\00\00\00\00`\f1?\00\00\00\00\00\00\00\00\00 \06?\07\1b\b5\bfW^\c6a[\02\1f=\00\00\00\00\00`\f1?\00\00\00\00\00\00\00\00\00 \06?\07\1b\b5\bfW^\c6a[\02\1f=\00\00\00\00\00@\f1?\00\00\00\00\00\00\00\00\00\e0\1b\96\d7A\b3\bf\df\13\f9\cc\da^,=\00\00\00\00\00@\f1?\00\00\00\00\00\00\00\00\00\e0\1b\96\d7A\b3\bf\df\13\f9\cc\da^,=\00\00\00\00\00 \f1?\00\00\00\00\00\00\00\00\00\80\a3\ee6e\b1\bf\t\a3\8fv^|\14=\00\00\00\00\00\00\f1?\00\00\00\00\00\00\00\00\00\80\11\c00\n\af\bf\91\8e6\83\9eY-=\00\00\00\00\00\00\f1?\00\00\00\00\00\00\00\00\00\80\11\c00\n\af\bf\91\8e6\83\9eY-=\00\00\00\00\00\e0\f0?\00\00\00\00\00\00\00\00\00\80\19q\ddB\ab\bfLp\d6\e5z\82\1c=\00\00\00\00\00\e0\f0?\00\00\00\00\00\00\00\00\00\80\19q\ddB\ab\bfLp\d6\e5z\82\1c=\00\00\00\00\00\c0\f0?\00\00\00\00\00\00\00\00\00\c02\f6Xt\a7\bf\ee\a1\f24F\fc,\bd\00\00\00\00\00\c0\f0?\00\00\00\00\00\00\00\00\00\c02\f6Xt\a7\bf\ee\a1\f24F\fc,\bd\00\00\00\00\00\a0\f0?\00\00\00\00\00\00\00\00\00\c0\fe\b9\87\9e\a3\bf\aa\fe&\f5\b7\02\f5<\00\00\00\00\00\a0\f0?\00\00\00\00\00\00\00\00\00\c0\fe\b9\87\9e\a3\bf\aa\fe&\f5\b7\02\f5<\00\00\00\00\00\80\f0?\00\00\00\00\00\00\00\00\00\00x\0e\9b\82\9f\bf\e4\t~|&\80)\bd\00\00\00\00\00\80\f0?\00\00\00\00\00\00\00\00\00\00x\0e\9b\82\9f\bf\e4\t~|&\80)\bd\00\00\00\00\00`\f0?\00\00\00\00\00\00\00\00\00\80\d5\07\1b\b9\97\bf9\a6\fa\93T\8d(\bd\00\00\00\00\00@\f0?\00\00\00\00\00\00\00\00\00\00\fc\b0\a8\c0\8f\bf\9c\a6\d3\f6|\1e\df\bc\00\00\00\00\00@\f0?\00\00\00\00\00\00\00\00\00\00\fc\b0\a8\c0\8f\bf\9c\a6\d3\f6|\1e\df\bc\00\00\00\00\00 \f0?\00\00\00\00\00\00\00\00\00\00\10k*\e0\7f\bf\e4@\da\0d?\e2\19\bd\00\00\00\00\00 \f0?\00\00\00\00\00\00\00\00\00\00\10k*\e0\7f\bf\e4@\da\0d?\e2\19\bd\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\c0\ef?\00\00\00\00\00\00\00\00\00\00\89u\15\10\80?\e8+\9d\99k\c7\10\bd\00\00\00\00\00\80\ef?\00\00\00\00\00\00\00\00\00\80\93XV \90?\d2\f7\e2\06[\dc#\bd\00\00\00\00\00@\ef?\00\00\00\00\00\00\00\00\00\00\c9(%I\98?4\0cZ2\ba\a0*\bd\00\00\00\00\00\00\ef?\00\00\00\00\00\00\00\00\00@\e7\89]A\a0?S\d7\f1\\\c0\11\01=\00\00\00\00\00\c0\ee?\00\00\00\00\00\00\00\00\00\00.\d4\aef\a4?(\fd\bdus\16,\bd\00\00\00\00\00\80\ee?\00\00\00\00\00\00\00\00\00\c0\9f\14\aa\94\a8?}&Z\d0\95y\19\bd\00\00\00\00\00@\ee?\00\00\00\00\00\00\00\00\00\c0\dd\cds\cb\ac?\07(\d8G\f2h\1a\bd\00\00\00\00\00 \ee?\00\00\00\00\00\00\00\00\00\c0\06\c01\ea\ae?{;\c9O>\11\0e\bd\00\00\00\00\00\e0\ed?\00\00\00\00\00\00\00\00\00`F\d1;\97\b1?\9b\9e\0dV]2%\bd\00\00\00\00\00\a0\ed?\00\00\00\00\00\00\00\00\00\e0\d1\a7\f5\bd\b3?\d7N\db\a5^\c8,=\00\00\00\00\00`\ed?\00\00\00\00\00\00\00\00\00\a0\97MZ\e9\b5?\1e\1d]<\06i,\bd\00\00\00\00\00@\ed?\00\00\00\00\00\00\00\00\00\c0\ea\n\d3\00\b7?2\ed\9d\a9\8d\1e\ec<\00\00\00\00\00\00\ed?\00\00\00\00\00\00\00\00\00@Y]^3\b9?\daG\bd:\\\11#=\00\00\00\00\00\c0\ec?\00\00\00\00\00\00\00\00\00`\ad\8d\c8j\bb?\e5h\f7+\80\90\13\bd\00\00\00\00\00\a0\ec?\00\00\00\00\00\00\00\00\00@\bc\01X\88\bc?\d3\acZ\c6\d1F&=\00\00\00\00\00`\ec?\00\00\00\00\00\00\00\00\00 \n\839\c7\be?\e0E\e6\afh\c0-\bd\00\00\00\00\00@\ec?\00\00\00\00\00\00\00\00\00\e0\db9\91\e8\bf?\fd\n\a1O\d64%\bd\00\00\00\00\00\00\ec?\00\00\00\00\00\00\00\00\00\e0\'\82\8e\17\c1?\f2\07-\cex\ef!=\00\00\00\00\00\e0\eb?\00\00\00\00\00\00\00\00\00\f0#~+\aa\c1?4\998D\8e\a7,=\00\00\00\00\00\a0\eb?\00\00\00\00\00\00\00\00\00\80\86\0ca\d1\c2?\a1\b4\81\cbl\9d\03=\00\00\00\00\00\80\eb?\00\00\00\00\00\00\00\00\00\90\15\b0\fce\c3?\89rK#\a8/\c6<\00\00\00\00\00@\eb?\00\00\00\00\00\00\00\00\00\b03\83=\91\c4?x\b6\fdTy\83%=\00\00\00\00\00 \eb?\00\00\00\00\00\00\00\00\00\b0\a1\e4\e5\'\c5?\c7}i\e5\e83&=\00\00\00\00\00\e0\ea?\00\00\00\00\00\00\00\00\00\10\8c\beNW\c6?x.<,\8b\cf\19=\00\00\00\00\00\c0\ea?\00\00\00\00\00\00\00\00\00pu\8b\12\f0\c6?\e1!\9c\e5\8d\11%\bd\00\00\00\00\00\a0\ea?\00\00\00\00\00\00\00\00\00PD\85\8d\89\c7?\05C\91p\10f\1c\bd\00\00\00\00\00`\ea?\00\00\00\00\00\00\00\00\00\009\eb\af\be\c8?\d1,\e9\aaT=\07\bd\00\00\00\00\00@\ea?\00\00\00\00\00\00\00\00\00\00\f7\dcZZ\c9?o\ff\a0X(\f2\07=\00\00\00\00\00\00\ea?\00\00\00\00\00\00\00\00\00\e0\8a<\ed\93\ca?i!VPCr(\bd\00\00\00\00\00\e0\e9?\00\00\00\00\00\00\00\00\00\d0[W\d81\cb?\aa\e1\acN\8d5\0c\bd\00\00\00\00\00\c0\e9?\00\00\00\00\00\00\00\00\00\e0;8\87\d0\cb?\b6\12TY\c4K-\bd\00\00\00\00\00\a0\e9?\00\00\00\00\00\00\00\00\00\10\f0\c6\fbo\cc?\d2+\96\c5r\ec\f1\bc\00\00\00\00\00`\e9?\00\00\00\00\00\00\00\00\00\90\d4\b0=\b1\cd?5\b0\15\f7*\ff*\bd\00\00\00\00\00@\e9?\00\00\00\00\00\00\00\00\00\10\e7\ff\0eS\ce?0\f4A`\'\12\c2<\00\00\00\00\00 \e9?\00\00\00\00\00\00\00\00\00\00\dd\e4\ad\f5\ce?\11\8e\bbe\15!\ca\bc\00\00\00\00\00\00\e9?\00\00\00\00\00\00\00\00\00\b0\b3l\1c\99\cf?0\df\0c\ca\ec\cb\1b=\00\00\00\00\00\c0\e8?\00\00\00\00\00\00\00\00\00XM`8q\d0?\91N\ed\16\db\9c\f8<\00\00\00\00\00\a0\e8?\00\00\00\00\00\00\00\00\00`ag-\c4\d0?\e9\ea<\16\8b\18\'=\00\00\00\00\00\80\e8?\00\00\00\00\00\00\00\00\00\e8\'\82\8e\17\d1?\1c\f0\a5c\0e!,\bd\00\00\00\00\00`\e8?\00\00\00\00\00\00\00\00\00\f8\ac\cb\\k\d1?\81\16\a5\f7\cd\9a+=\00\00\00\00\00@\e8?\00\00\00\00\00\00\00\00\00hZc\99\bf\d1?\b7\bdGQ\ed\a6,=\00\00\00\00\00 \e8?\00\00\00\00\00\00\00\00\00\b8\0emE\14\d2?\ea\baF\ba\de\87\n=\00\00\00\00\00\e0\e7?\00\00\00\00\00\00\00\00\00\90\dc|\f0\be\d2?\f4\04PJ\fa\9c*=\00\00\00\00\00\c0\e7?\00\00\00\00\00\00\00\00\00`\d3\e1\f1\14\d3?\b8<!\d3z\e2(\bd\00\00\00\00\00\a0\e7?\00\00\00\00\00\00\00\00\00\10\bevgk\d3?\c8w\f1\b0\cdn\11=\00\00\00\00\00\80\e7?\00\00\00\00\00\00\00\00\0003wR\c2\d3?\\\bd\06\b6T;\18=\00\00\00\00\00`\e7?\00\00\00\00\00\00\00\00\00\e8\d5#\b4\19\d4?\9d\e0\90\ec6\e4\08=\00\00\00\00\00@\e7?\00\00\00\00\00\00\00\00\00\c8q\c2\8dq\d4?u\d6g\t\ce\'/\bd\00\00\00\00\00 \e7?\00\00\00\00\00\00\00\00\000\17\9e\e0\c9\d4?\a4\d8\n\1b\89 .\bd\00\00\00\00\00\00\e7?\00\00\00\00\00\00\00\00\00\a08\07\ae\"\d5?Y\c7d\81p\be.=\00\00\00\00\00\e0\e6?\00\00\00\00\00\00\00\00\00\d0\c8S\f7{\d5?\ef@]\ee\ed\ad\1f=\00\00\00\00\00\c0\e6?\00\00\00\00\00\00\00\00\00`Y\df\bd\d5\d5?\dce\a4\08*\0b\n\bd")
  (data (i32.const 4104) "\00\00\00\00\00\00\00\00\00\00\00\00\00\00\f0?n\bf\88\1aO;\9b<53\fb\a9=\f6\ef?]\dc\d8\9c\13`q\bca\80w>\9a\ec\ef?\d1f\87\10z^\90\bc\85\7fn\e8\15\e3\ef?\13\f6g5R\d2\8c<t\85\15\d3\b0\d9\ef?\fa\8e\f9#\80\ce\8b\bc\de\f6\dd)k\d0\ef?a\c8\e6aN\f7`<\c8\9bu\18E\c7\ef?\99\d33[\e4\a3\90<\83\f3\c6\ca>\be\ef?m{\83]\a6\9a\97<\0f\89\f9lX\b5\ef?\fc\ef\fd\92\1a\b5\8e<\f7Gr+\92\ac\ef?\d1\9c/p=\be><\a2\d1\d32\ec\a3\ef?\0bn\90\894\03j\bc\1b\d3\fe\aff\9b\ef?\0e\bd/*RV\95\bcQ[\12\d0\01\93\ef?U\eaN\8c\ef\80P\bc\cc1l\c0\bd\8a\ef?\16\f4\d5\b9#\c9\91\bc\e0-\a9\ae\9a\82\ef?\afU\\\e9\e3\d3\80<Q\8e\a5\c8\98z\ef?H\93\a5\ea\15\1b\80\bc{Q}<\b8r\ef?=2\deU\f0\1f\8f\bc\ea\8d\8c8\f9j\ef?\bfS\13?\8c\89\8b<u\cbo\eb[c\ef?&\eb\11v\9c\d9\96\bc\d4\\\04\84\e0[\ef?`/:>\f7\ec\9a<\aa\b9h1\87T\ef?\9d8\86\cb\82\e7\8f\bc\1d\d9\fc\"PM\ef?\8d\c3\a6DAo\8a<\d6\8cb\88;F\ef?}\04\e4\b0\05z\80<\96\dc}\91I?\ef?\94\a8\a8\e3\fd\8e\96<8bunz8\ef?}Ht\f2\18^\87<?\a6\b2O\ce1\ef?\f2\e7\1f\98+G\80<\dd|\e2eE+\ef?^\08q?{\b8\96\bc\81c\f5\e1\df$\ef?1\ab\tm\e1\f7\82<\e1\de\1f\f5\9d\1e\ef?\fa\bfo\1a\9b!=\bc\90\d9\da\d0\7f\18\ef?\b4\n\0cr\827\8b<\0b\03\e4\a6\85\12\ef?\8f\cb\ce\89\92\14n<V/>\a9\af\0c\ef?\b6\ab\b0MuM\83<\15\b71\n\fe\06\ef?Lt\ac\e2\01B\86<1\d8L\fcp\01\ef?J\f8\d3]9\dd\8f<\ff\16d\b2\08\fc\ee?\04[\8e;\80\a3\86\bc\f1\9f\92_\c5\f6\ee?hPK\cc\edJ\92\bc\cb\a9:7\a7\f1\ee?\8e-Q\1b\f8\07\99\bcf\d8\05m\ae\ec\ee?\d26\94>\e8\d1q\bc\f7\9f\e54\db\e7\ee?\15\1b\ce\b3\19\19\99\bc\e5\a8\13\c3-\e3\ee?mL*\a7H\9f\85<\"4\12L\a6\de\ee?\8ai(z`\12\93\bc\1c\80\ac\04E\da\ee?[\89\17H\8f\a7X\bc*.\f7!\n\d6\ee?\1b\9aIg\9b,|\bc\97\a8P\d9\f5\d1\ee?\11\ac\c2`\edcC<-\89a`\08\ce\ee?\efd\06;\tf\96<W\00\1d\edA\ca\ee?y\03\a1\da\e1\ccn<\d0<\c1\b5\a2\c6\ee?0\12\0f?\8e\ff\93<\de\d3\d7\f0*\c3\ee?\b0\afz\bb\ce\90v<\'*6\d5\da\bf\ee?w\e0T\eb\bd\1d\93<\0d\dd\fd\99\b2\bc\ee?\8e\a3q\004\94\8f\bc\a7,\9dv\b2\b9\ee?I\a3\93\dc\cc\de\87\bcBf\cf\a2\da\b6\ee?_8\0f\bd\c6\dex\bc\82O\9dV+\b4\ee?\f6\\{\ecF\12\86\bc\0f\92]\ca\a4\b1\ee?\8e\d7\fd\18\055\93<\da\'\b56G\af\ee?\05\9b\8a/\b7\98{<\fd\c7\97\d4\12\ad\ee?\tT\1c\e2\e1c\90<)TH\dd\07\ab\ee?\ea\c6\19P\85\c74<\b7FY\8a&\a9\ee?5\c0d+\e62\94<H!\ad\15o\a7\ee?\9fv\99aJ\e4\8c\bc\t\dcv\b9\e1\a5\ee?\a8M\ef;\c53\8c\bc\85U:\b0~\a4\ee?\ae\e9+\89xS\84\bc \c3\cc4F\a3\ee?XXVx\dd\ce\93\bc%\"U\828\a2\ee?d\19~\80\aa\10W<s\a9L\d4U\a1\ee?(\"^\bf\ef\b3\93\bc\cd;\7ff\9e\a0\ee?\82\b94\87\ad\12j\bc\bf\da\0bu\12\a0\ee?\ee\a9m\b8\efgc\bc/\1ae<\b2\9f\ee?Q\88\e0T=\dc\80\bc\84\94Q\f9}\9f\ee?\cf>Z~d\1fx\bct_\ec\e8u\9f\ee?\b0}\8b\c0J\ee\86\bct\81\a5H\9a\9f\ee?\8a\e6U\1e2\19\86\bc\c9gBV\eb\9f\ee?\d3\d4\t^\cb\9c\90<?]\deOi\a0\ee?\1d\a5M\b9\dc2{\bc\87\01\ebs\14\a1\ee?k\c0gT\fd\ec\94<2\c10\01\ed\a1\ee?Ul\d6\ab\e1\ebe<bN\cf6\f3\a2\ee?B\cf\b3/\c5\a1\88\bc\12\1a>T\'\a4\ee?47;\f1\b6i\93\bc\13\ceL\99\89\a5\ee?\1e\ff\19:\84^\80\bc\ad\c7#F\1a\a7\ee?nWr\d8P\d4\94\bc\ed\92D\9b\d9\a8\ee?\00\8a\0e[g\ad\90<\99f\8a\d9\c7\aa\ee?\b4\ea\f0\c1/\b7\8d<\db\a0*B\e5\ac\ee?\ff\e7\c5\9c`\b6e\bc\8cD\b5\162\af\ee?D_\f3Y\83\f6{<6w\15\99\ae\b1\ee?\83=\1e\a7\1f\t\93\bc\c6\ff\91\0b[\b4\ee?)\1el\8b\b8\a9]\bc\e5\c5\cd\b07\b7\ee?Y\b9\90|\f9#l\bc\0fR\c8\cbD\ba\ee?\aa\f9\f4\"CC\92\bcPN\de\9f\82\bd\ee?K\8ef\d7l\ca\85\bc\ba\07\cap\f1\c0\ee?\'\ce\91+\fc\afq<\90\f0\a3\82\91\c4\ee?\bbs\n\e15\d2m<##\e3\19c\c8\ee?c\"b\"\04\c5\87\bce\e5]{f\cc\ee?\d51\e2\e3\86\1c\8b<3-J\ec\9b\d0\ee?\15\bb\bc\d3\d1\bb\91\bc]%>\b2\03\d5\ee?\d21\ee\9c1\cc\90<X\b30\13\9e\d9\ee?\b3Zsn\84i\84<\bf\fdyUk\de\ee?\b4\9d\8e\97\cd\df\82\bcz\f3\d3\bfk\e3\ee?\873\cb\92w\1a\8c<\ad\d3Z\99\9f\e8\ee?\fa\d9\d1J\8f{\90\bcf\b6\8d)\07\ee\ee?\ba\ae\dcV\d9\c3U\bc\fb\15O\b8\a2\f3\ee?@\f6\a6=\0e\a4\90\bc:Y\e5\8dr\f9\ee?4\93\ad8\f4\d6h\bcG^\fb\f2v\ff\ee?5\8aXk\e2\ee\91\bcJ\06\a10\b0\05\ef?\cd\dd_\n\d7\fft<\d2\c1K\90\1e\0c\ef?\ac\98\92\fa\fb\bd\91\bc\t\1e\d7[\c2\12\ef?\b3\0c\af0\aens<\9cR\85\dd\9b\19\ef?\94\fd\9f\\2\e3\8e<z\d0\ff_\ab \ef?\acY\t\d1\8f\e0\84<K\d1W.\f1\'\ef?g\1aN8\af\cdc<\b5\e7\06\94m/\ef?h\19\92l,kg<i\90\ef\dc 7\ef?\d2\b5\cc\83\18\8a\80\bc\fa\c3]U\0b?\ef?o\fa\ff?]\ad\8f\bc|\89\07J-G\ef?I\a9u8\ae\0d\90\bc\f2\89\0d\08\87O\ef?\a7\07=\a6\85\a3t<\87\a4\fb\dc\18X\ef?\0f\"@ \9e\91\82\bc\98\83\c9\16\e3`\ef?\ac\92\c1\d5PZ\8e<\852\db\03\e6i\ef?Kk\01\acY:\84<`\b4\01\f3!s\ef?\1f>\b4\07!\d5\82\bc_\9b{3\97|\ef?\c9\0dG;\b9*\89\bc)\a1\f5\14F\86\ef?\d3\88:`\04\b6t<\f6?\8b\e7.\90\ef?qr\9dQ\ec\c5\83<\83L\c7\fbQ\9a\ef?\f0\91\d3\8f\12\f7\8f\bc\da\90\a4\a2\af\a4\ef?}t#\e2\98\ae\8d\bc\f1g\8e-H\af\ef?\08 \aaA\bc\c3\8e<\'Za\ee\1b\ba\ef?2\eb\a9\c3\94+\84<\97\bak7+\c5\ef?\ee\85\d11\a9d\8a<@En[v\d0\ef?\ed\e3;\e4\ba7\8e\bc\14\be\9c\ad\fd\db\ef?\9d\cd\91M;\89w<\d8\90\9e\81\c1\e7\ef?\89\cc`A\c1\05S<\f1q\8f+\c2\f3\ef?")
@@ -17,20 +27,86 @@
  (global $binary/F (mut f64) (f64.const 0))
  (export "memory" (memory $0))
  (start $~start)
- (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
-  (local $2 f64)
-  (local $3 f64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i64)
-  (local $7 i64)
-  (local $8 i64)
-  (local $9 i64)
+ (func $~lib/util/math/zeroinfnan (param $0 i64) (result i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.sub
+  i64.const -9007199254740992
+  i64.const 1
+  i64.sub
+  i64.ge_u
+ )
+ (func $~lib/util/math/checkint (param $0 i64) (result i32)
+  (local $1 i64)
+  local.get $0
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  local.set $1
+  local.get $1
+  i64.const 1023
+  i64.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  i64.gt_u
+  if
+   i32.const 2
+   return
+  end
+  i64.const 1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  local.get $1
+  i64.sub
+  i64.shl
+  local.set $1
+  local.get $0
+  local.get $1
+  i64.const 1
+  i64.sub
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  local.get $1
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 1
+   return
+  end
+  i32.const 2
+ )
+ (func $~lib/util/math/log_inline (param $0 i64) (result f64)
+  (local $1 i64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  (local $9 f64)
   (local $10 f64)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
   (local $15 f64)
   (local $16 f64)
   (local $17 f64)
@@ -46,1229 +122,1590 @@
   (local $27 f64)
   (local $28 f64)
   (local $29 f64)
-  (local $30 f64)
-  (local $31 f64)
-  (local $32 f64)
-  (local $33 f64)
-  (local $34 f64)
-  (local $35 f64)
-  (local $36 f64)
-  (local $37 f64)
-  (local $38 f64)
-  (local $39 i32)
-  (local $40 i32)
-  (local $41 i32)
-  (local $42 i32)
-  (local $43 i64)
-  (local $44 i64)
+  local.get $0
+  i64.const 4604531861337669632
+  i64.sub
+  local.set $1
   local.get $1
-  f64.abs
-  f64.const 2
-  f64.le
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shr_u
+  i64.const 127
+  i64.and
+  i32.wrap_i64
+  local.set $2
+  local.get $1
+  i64.const 52
+  i64.shr_s
+  local.set $3
+  local.get $0
+  local.get $1
+  i64.const 4095
+  i64.const 52
+  i64.shl
+  i64.and
+  i64.sub
+  local.set $4
+  local.get $4
+  f64.reinterpret_i64
+  local.set $5
+  local.get $3
+  f64.convert_i64_s
+  local.set $6
+  i32.const 8
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $7
+  i32.const 8
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=16
+  local.set $8
+  i32.const 8
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=24
+  local.set $9
+  local.get $4
+  i64.const 2147483648
+  i64.add
+  i64.const -4294967296
+  i64.and
+  f64.reinterpret_i64
+  local.set $10
+  local.get $5
+  local.get $10
+  f64.sub
+  local.set $11
+  local.get $10
+  local.get $7
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $12
+  local.get $11
+  local.get $7
+  f64.mul
+  local.set $13
+  local.get $12
+  local.get $13
+  f64.add
+  local.set $14
+  local.get $6
+  f64.const 0.6931471805598903
+  f64.mul
+  local.get $8
+  f64.add
+  local.set $15
+  local.get $15
+  local.get $14
+  f64.add
+  local.set $16
+  local.get $6
+  f64.const 5.497923018708371e-14
+  f64.mul
+  local.get $9
+  f64.add
+  local.set $17
+  local.get $15
+  local.get $16
+  f64.sub
+  local.get $14
+  f64.add
+  local.set $18
+  f64.const -0.5
+  local.get $14
+  f64.mul
+  local.set $19
+  local.get $14
+  local.get $19
+  f64.mul
+  local.set $20
+  local.get $14
+  local.get $20
+  f64.mul
+  local.set $21
+  f64.const -0.5
+  local.get $12
+  f64.mul
+  local.set $22
+  local.get $12
+  local.get $22
+  f64.mul
+  local.set $23
+  local.get $16
+  local.get $23
+  f64.add
+  local.set $24
+  local.get $13
+  local.get $19
+  local.get $22
+  f64.add
+  f64.mul
+  local.set $25
+  local.get $16
+  local.get $24
+  f64.sub
+  local.get $23
+  f64.add
+  local.set $26
+  local.get $21
+  f64.const -0.6666666666666679
+  local.get $14
+  f64.const 0.5000000000000007
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const 0.7999999995323976
+  local.get $14
+  f64.const -0.6666666663487739
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const -1.142909628459501
+  local.get $14
+  f64.const 1.0000415263675542
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  local.set $27
+  local.get $17
+  local.get $18
+  f64.add
+  local.get $25
+  f64.add
+  local.get $26
+  f64.add
+  local.get $27
+  f64.add
+  local.set $28
+  local.get $24
+  local.get $28
+  f64.add
+  local.set $29
+  local.get $24
+  local.get $29
+  f64.sub
+  local.get $28
+  f64.add
+  global.set $~lib/util/math/log_tail
+  local.get $29
+ )
+ (func $~lib/util/math/xflow (param $0 i32) (param $1 f64) (result f64)
+  local.get $1
+  f64.neg
+  local.get $1
+  local.get $0
+  select
+  local.get $1
+  f64.mul
+ )
+ (func $~lib/util/math/uflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 1152921504606846976
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/oflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 8070450532247928832
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/specialcase (param $0 f64) (param $1 i64) (param $2 i64) (result f64)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  local.get $2
+  i64.const 2147483648
+  i64.and
+  i64.const 0
+  i64.ne
+  i32.eqz
   if
    local.get $1
-   f64.const 2
-   f64.eq
-   if
-    local.get $0
-    local.get $0
-    f64.mul
-    return
-   end
-   local.get $1
-   f64.const 0.5
-   f64.eq
-   if
-    local.get $0
-    f64.sqrt
-    f64.abs
-    f64.const inf
-    local.get $0
-    f64.const inf
-    f64.neg
-    f64.ne
-    select
-    return
-   end
-   local.get $1
-   f64.const -1
-   f64.eq
-   if
-    f64.const 1
-    local.get $0
-    f64.div
-    return
-   end
-   local.get $1
-   f64.const 1
-   f64.eq
-   if
-    local.get $0
-    return
-   end
+   i64.const 1009
+   i64.const 52
+   i64.shl
+   i64.sub
+   local.set $1
    local.get $1
-   f64.const 0
-   f64.eq
-   if
-    f64.const 1
-    return
-   end
-  end
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/pow_lut|inlined.0 (result f64)
-   local.get $0
+   f64.reinterpret_i64
    local.set $3
-   local.get $1
-   local.set $2
-   i32.const 0
-   local.set $4
+   f64.const 5486124068793688683255936e279
    local.get $3
-   i64.reinterpret_f64
-   local.set $5
-   local.get $2
-   i64.reinterpret_f64
-   local.set $6
-   local.get $5
-   i64.const 52
-   i64.shr_u
-   local.set $7
-   local.get $6
-   i64.const 52
-   i64.shr_u
-   local.set $8
-   local.get $7
-   i64.const 1
-   i64.sub
+   local.get $3
+   local.get $0
+   f64.mul
+   f64.add
+   f64.mul
+   return
+  end
+  local.get $1
+  i64.const 1022
+  i64.const 52
+  i64.shl
+  i64.add
+  local.set $1
+  local.get $1
+  f64.reinterpret_i64
+  local.set $3
+  local.get $3
+  local.get $3
+  local.get $0
+  f64.mul
+  f64.add
+  local.set $4
+  local.get $4
+  f64.abs
+  f64.const 1
+  f64.lt
+  if
+   f64.const 1
+   local.get $4
+   f64.copysign
+   local.set $5
+   local.get $3
+   local.get $4
+   f64.sub
+   local.get $3
+   local.get $0
+   f64.mul
+   f64.add
+   local.set $6
+   local.get $5
+   local.get $4
+   f64.add
+   local.set $7
+   local.get $5
+   local.get $7
+   f64.sub
+   local.get $4
+   f64.add
+   local.get $6
+   f64.add
+   local.set $6
+   local.get $7
+   local.get $6
+   f64.add
+   local.get $5
+   f64.sub
+   local.set $4
+   local.get $4
+   f64.const 0
+   f64.eq
+   if
+    local.get $1
+    i64.const -9223372036854775808
+    i64.and
+    f64.reinterpret_i64
+    local.set $4
+   end
+  end
+  local.get $4
+  f64.const 2.2250738585072014e-308
+  f64.mul
+ )
+ (func $~lib/util/math/exp_inline (param $0 f64) (param $1 f64) (param $2 i32) (result f64)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 f64)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $15
+  local.get $15
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  i32.const 2047
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 969
+  i32.sub
+  i32.const 63
+  i32.ge_u
+  if
+   local.get $3
+   i32.const 969
+   i32.sub
+   i32.const -2147483648
+   i32.ge_u
+   if
+    f64.const -1
+    f64.const 1
+    local.get $2
+    select
+    return
+   end
+   local.get $3
+   i32.const 1033
+   i32.ge_u
+   if
+    local.get $15
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    if (result f64)
+     local.get $2
+     call $~lib/util/math/uflow
+    else
+     local.get $2
+     call $~lib/util/math/oflow
+    end
+    return
+   end
+   i32.const 0
+   local.set $3
+  end
+  f64.const 184.6649652337873
+  local.get $0
+  f64.mul
+  local.set $9
+  local.get $9
+  f64.const 6755399441055744
+  f64.add
+  local.set $8
+  local.get $8
+  i64.reinterpret_f64
+  local.set $4
+  local.get $8
+  f64.const 6755399441055744
+  f64.sub
+  local.set $8
+  local.get $0
+  local.get $8
+  f64.const -0.005415212348111709
+  f64.mul
+  f64.add
+  local.get $8
+  f64.const -1.2864023111638346e-14
+  f64.mul
+  f64.add
+  local.set $10
+  local.get $10
+  local.get $1
+  f64.add
+  local.set $10
+  local.get $4
+  i64.const 127
+  i64.and
+  i64.const 1
+  i64.shl
+  i32.wrap_i64
+  local.set $7
+  local.get $4
+  local.get $2
+  i64.extend_i32_u
+  i64.add
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shl
+  local.set $5
+  i32.const 4104
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  f64.reinterpret_i64
+  local.set $13
+  i32.const 4104
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load offset=8
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $10
+  local.get $10
+  f64.mul
+  local.set $11
+  local.get $13
+  local.get $10
+  f64.add
+  local.get $11
+  f64.const 0.49999999999996786
+  local.get $10
+  f64.const 0.16666666666665886
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $11
+  local.get $11
+  f64.mul
+  f64.const 0.0416666808410674
+  local.get $10
+  f64.const 0.008333335853059549
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $14
+  local.get $3
+  i32.const 0
+  i32.eq
+  if
+   local.get $14
+   local.get $6
+   local.get $4
+   call $~lib/util/math/specialcase
+   return
+  end
+  local.get $6
+  f64.reinterpret_i64
+  local.set $12
+  local.get $12
+  local.get $12
+  local.get $14
+  f64.mul
+  f64.add
+ )
+ (func $~lib/util/math/pow_lut (param $0 f64) (param $1 f64) (result f64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 f64)
+  (local $8 i32)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 f64)
+  (local $16 f64)
+  i32.const 0
+  local.set $2
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $1
+  i64.reinterpret_f64
+  local.set $4
+  local.get $3
+  i64.const 52
+  i64.shr_u
+  local.set $5
+  local.get $4
+  i64.const 52
+  i64.shr_u
+  local.set $6
+  local.get $5
+  i64.const 1
+  i64.sub
+  i64.const 2047
+  i64.const 1
+  i64.sub
+  i64.ge_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $6
    i64.const 2047
-   i64.const 1
+   i64.and
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
    i64.sub
    i64.ge_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
-   end
+  end
+  if
+   local.get $4
+   call $~lib/util/math/zeroinfnan
+   if
+    local.get $4
+    i64.const 1
+    i64.shl
+    i64.const 0
+    i64.eq
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
+    if
+     f64.const nan:0x8000000000000
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const -9007199254740992
+    i64.gt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $4
+     i64.const 1
+     i64.shl
+     i64.const -9007199254740992
+     i64.gt_u
+    end
+    if
+     local.get $0
+     local.get $1
+     f64.add
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const 9214364837600034816
+    i64.eq
+    if
+     f64.const nan:0x8000000000000
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const 9214364837600034816
+    i64.lt_u
+    local.get $4
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    i32.eqz
+    i32.eq
+    if
+     f64.const 0
+     return
+    end
+    local.get $1
+    local.get $1
+    f64.mul
+    return
+   end
+   local.get $3
+   call $~lib/util/math/zeroinfnan
+   if
+    local.get $0
+    local.get $0
+    f64.mul
+    local.set $7
+    local.get $3
+    i64.const 63
+    i64.shr_u
+    i32.wrap_i64
+    if (result i32)
+     local.get $4
+     call $~lib/util/math/checkint
+     i32.const 1
+     i32.eq
+    else
+     i32.const 0
+    end
+    if
+     local.get $7
+     f64.neg
+     local.set $7
+    end
+    local.get $4
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    if (result f64)
+     f64.const 1
+     local.get $7
+     f64.div
+    else
+     local.get $7
+    end
+    return
+   end
+   local.get $3
+   i64.const 63
+   i64.shr_u
+   i64.const 0
+   i64.ne
+   if
+    local.get $4
+    call $~lib/util/math/checkint
+    local.set $8
+    local.get $8
+    i32.const 0
+    i32.eq
+    if
+     local.get $0
+     local.get $0
+     f64.sub
+     local.get $0
+     local.get $0
+     f64.sub
+     f64.div
+     return
+    end
+    local.get $8
+    i32.const 1
+    i32.eq
+    if
+     i32.const 262144
+     local.set $2
+    end
+    local.get $3
+    i64.const 9223372036854775807
+    i64.and
+    local.set $3
+    local.get $5
+    i64.const 2047
+    i64.and
+    local.set $5
+   end
+   local.get $6
+   i64.const 2047
+   i64.and
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
+   i64.sub
+   i64.ge_u
+   if
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
+    if
+     f64.const 1
+     return
+    end
+    local.get $6
+    i64.const 2047
+    i64.and
+    i64.const 958
+    i64.lt_u
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.gt_u
+    local.get $6
+    i64.const 2048
+    i64.lt_u
+    i32.eq
+    if (result f64)
+     f64.const inf
+    else
+     f64.const 0
+    end
+    return
+   end
+   local.get $5
+   i64.const 0
+   i64.eq
+   if
+    local.get $0
+    f64.const 4503599627370496
+    f64.mul
+    i64.reinterpret_f64
+    local.set $3
+    local.get $3
+    i64.const 9223372036854775807
+    i64.and
+    local.set $3
+    local.get $3
+    i64.const 52
+    i64.const 52
+    i64.shl
+    i64.sub
+    local.set $3
+   end
+  end
+  local.get $3
+  call $~lib/util/math/log_inline
+  local.set $9
+  global.get $~lib/util/math/log_tail
+  local.set $10
+  local.get $4
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $13
+  local.get $1
+  local.get $13
+  f64.sub
+  local.set $14
+  local.get $9
+  i64.reinterpret_f64
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $15
+  local.get $9
+  local.get $15
+  f64.sub
+  local.get $10
+  f64.add
+  local.set $16
+  local.get $13
+  local.get $15
+  f64.mul
+  local.set $11
+  local.get $14
+  local.get $15
+  f64.mul
+  local.get $1
+  local.get $16
+  f64.mul
+  f64.add
+  local.set $12
+  local.get $11
+  local.get $12
+  local.get $2
+  call $~lib/util/math/exp_inline
+ )
+ (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
+  local.get $1
+  f64.abs
+  f64.const 2
+  f64.le
+  if
+   local.get $1
+   f64.const 2
+   f64.eq
+   if
+    local.get $0
+    local.get $0
+    f64.mul
+    return
+   end
+   local.get $1
+   f64.const 0.5
+   f64.eq
+   if
+    local.get $0
+    f64.sqrt
+    f64.abs
+    f64.const inf
+    local.get $0
+    f64.const inf
+    f64.neg
+    f64.ne
+    select
+    return
+   end
+   local.get $1
+   f64.const -1
+   f64.eq
+   if
+    f64.const 1
+    local.get $0
+    f64.div
+    return
+   end
+   local.get $1
+   f64.const 1
+   f64.eq
+   if
+    local.get $0
+    return
+   end
+   local.get $1
+   f64.const 0
+   f64.eq
+   if
+    f64.const 1
+    return
+   end
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  local.get $1
+  call $~lib/util/math/pow_lut
+  return
+ )
+ (func $~lib/math/NativeMathf.mod (param $0 f32) (param $1 f32) (result f32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 f32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  local.get $0
+  i32.reinterpret_f32
+  local.set $2
+  local.get $1
+  i32.reinterpret_f32
+  local.set $3
+  local.get $2
+  i32.const 23
+  i32.shr_u
+  i32.const 255
+  i32.and
+  local.set $4
+  local.get $3
+  i32.const 23
+  i32.shr_u
+  i32.const 255
+  i32.and
+  local.set $5
+  local.get $2
+  i32.const -2147483648
+  i32.and
+  local.set $6
+  local.get $3
+  i32.const 1
+  i32.shl
+  local.set $7
+  local.get $7
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
+   local.get $4
+   i32.const 255
+   i32.eq
+  end
+  if (result i32)
+   i32.const 1
+  else
+   local.get $1
+   local.get $1
+   f32.ne
+  end
+  if
+   local.get $0
+   local.get $1
+   f32.mul
+   local.set $8
+   local.get $8
+   local.get $8
+   f32.div
+   return
+  end
+  local.get $2
+  i32.const 1
+  i32.shl
+  local.set $9
+  local.get $9
+  local.get $7
+  i32.le_u
+  if
+   local.get $9
+   local.get $7
+   i32.eq
+   if
+    f32.const 0
+    local.get $0
+    f32.mul
+    return
+   end
+   local.get $0
+   return
+  end
+  local.get $4
+  i32.eqz
+  if
+   local.get $4
+   local.get $2
+   i32.const 9
+   i32.shl
+   i32.clz
+   i32.sub
+   local.set $4
+   local.get $2
+   i32.const 0
+   local.get $4
+   i32.sub
+   i32.const 1
+   i32.add
+   i32.shl
+   local.set $2
+  else
+   local.get $2
+   i32.const -1
+   i32.const 9
+   i32.shr_u
+   i32.and
+   local.set $2
+   local.get $2
+   i32.const 1
+   i32.const 23
+   i32.shl
+   i32.or
+   local.set $2
+  end
+  local.get $5
+  i32.eqz
+  if
+   local.get $5
+   local.get $3
+   i32.const 9
+   i32.shl
+   i32.clz
+   i32.sub
+   local.set $5
+   local.get $3
+   i32.const 0
+   local.get $5
+   i32.sub
+   i32.const 1
+   i32.add
+   i32.shl
+   local.set $3
+  else
+   local.get $3
+   i32.const -1
+   i32.const 9
+   i32.shr_u
+   i32.and
+   local.set $3
+   local.get $3
+   i32.const 1
+   i32.const 23
+   i32.shl
+   i32.or
+   local.set $3
+  end
+  loop $while-continue|0
+   local.get $4
+   local.get $5
+   i32.gt_s
+   local.set $10
+   local.get $10
+   if
+    local.get $2
+    local.get $3
+    i32.ge_u
+    if
+     local.get $2
+     local.get $3
+     i32.eq
+     if
+      f32.const 0
+      local.get $0
+      f32.mul
+      return
+     end
+     local.get $2
+     local.get $3
+     i32.sub
+     local.set $2
+    end
+    local.get $2
+    i32.const 1
+    i32.shl
+    local.set $2
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $4
+    br $while-continue|0
+   end
+  end
+  local.get $2
+  local.get $3
+  i32.ge_u
+  if
+   local.get $2
+   local.get $3
+   i32.eq
+   if
+    f32.const 0
+    local.get $0
+    f32.mul
+    return
+   end
+   local.get $2
+   local.get $3
+   i32.sub
+   local.set $2
+  end
+  local.get $2
+  i32.const 8
+  i32.shl
+  i32.clz
+  local.set $11
+  local.get $4
+  local.get $11
+  i32.sub
+  local.set $4
+  local.get $2
+  local.get $11
+  i32.shl
+  local.set $2
+  local.get $4
+  i32.const 0
+  i32.gt_s
+  if
+   local.get $2
+   i32.const 1
+   i32.const 23
+   i32.shl
+   i32.sub
+   local.set $2
+   local.get $2
+   local.get $4
+   i32.const 23
+   i32.shl
+   i32.or
+   local.set $2
+  else
+   local.get $2
+   i32.const 0
+   local.get $4
+   i32.sub
+   i32.const 1
+   i32.add
+   i32.shr_u
+   local.set $2
+  end
+  local.get $2
+  local.get $6
+  i32.or
+  local.set $2
+  local.get $2
+  f32.reinterpret_i32
+ )
+ (func $~lib/util/math/zeroinfnanf (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1
+  i32.shl
+  i32.const 1
+  i32.sub
+  i32.const 2139095040
+  i32.const 1
+  i32.shl
+  i32.const 1
+  i32.sub
+  i32.ge_u
+ )
+ (func $~lib/util/math/checkintf (param $0 i32) (result i32)
+  (local $1 i32)
+  local.get $0
+  i32.const 23
+  i32.shr_u
+  i32.const 255
+  i32.and
+  local.set $1
+  local.get $1
+  i32.const 127
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i32.const 127
+  i32.const 23
+  i32.add
+  i32.gt_u
+  if
+   i32.const 2
+   return
+  end
+  i32.const 1
+  i32.const 127
+  i32.const 23
+  i32.add
+  local.get $1
+  i32.sub
+  i32.shl
+  local.set $1
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.and
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.and
+  if
+   i32.const 1
+   return
+  end
+  i32.const 2
+ )
+ (func $~lib/util/math/log2f_inline (param $0 i32) (result f64)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  local.get $0
+  i32.const 1060306944
+  i32.sub
+  local.set $1
+  local.get $1
+  i32.const 23
+  i32.const 4
+  i32.sub
+  i32.shr_u
+  i32.const 15
+  i32.and
+  local.set $2
+  local.get $1
+  i32.const -8388608
+  i32.and
+  local.set $3
+  local.get $0
+  local.get $3
+  i32.sub
+  local.set $4
+  local.get $3
+  i32.const 23
+  i32.shr_s
+  local.set $5
+  i32.const 6152
+  local.get $2
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $6
+  i32.const 6152
+  local.get $2
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $7
+  local.get $4
+  f32.reinterpret_i32
+  f64.promote_f32
+  local.set $8
+  local.get $8
+  local.get $6
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $9
+  local.get $7
+  local.get $5
+  f64.convert_i32_s
+  f64.add
+  local.set $10
+  f64.const 0.288457581109214
+  local.get $9
+  f64.mul
+  f64.const -0.36092606229713164
+  f64.add
+  local.set $11
+  f64.const 0.480898481472577
+  local.get $9
+  f64.mul
+  f64.const -0.7213474675006291
+  f64.add
+  local.set $12
+  f64.const 1.4426950408774342
+  local.get $9
+  f64.mul
+  local.get $10
+  f64.add
+  local.set $13
+  local.get $9
+  local.get $9
+  f64.mul
+  local.set $9
+  local.get $13
+  local.get $12
+  local.get $9
+  f64.mul
+  f64.add
+  local.set $13
+  local.get $11
+  local.get $9
+  local.get $9
+  f64.mul
+  f64.mul
+  local.get $13
+  f64.add
+  local.set $11
+  local.get $11
+ )
+ (func $~lib/util/math/xflowf (param $0 i32) (param $1 f32) (result f32)
+  local.get $1
+  f32.neg
+  local.get $1
+  local.get $0
+  select
+  local.get $1
+  f32.mul
+ )
+ (func $~lib/util/math/oflowf (param $0 i32) (result f32)
+  local.get $0
+  i32.const 1879048192
+  f32.reinterpret_i32
+  call $~lib/util/math/xflowf
+ )
+ (func $~lib/util/math/uflowf (param $0 i32) (result f32)
+  local.get $0
+  i32.const 268435456
+  f32.reinterpret_i32
+  call $~lib/util/math/xflowf
+ )
+ (func $~lib/util/math/exp2f_inline (param $0 f64) (param $1 i32) (result f32)
+  (local $2 f64)
+  (local $3 i64)
+  (local $4 f64)
+  (local $5 i64)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  local.get $0
+  f64.const 211106232532992
+  f64.add
+  local.set $2
+  local.get $2
+  i64.reinterpret_f64
+  local.set $3
+  local.get $0
+  local.get $2
+  f64.const 211106232532992
+  f64.sub
+  f64.sub
+  local.set $4
+  i32.const 6408
+  local.get $3
+  i32.wrap_i64
+  i32.const 31
+  i32.and
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  local.set $5
+  local.get $5
+  local.get $3
+  local.get $1
+  i64.extend_i32_u
+  i64.add
+  i64.const 52
+  i64.const 5
+  i64.sub
+  i64.shl
+  i64.add
+  local.set $5
+  local.get $5
+  f64.reinterpret_i64
+  local.set $8
+  f64.const 0.05550361559341535
+  local.get $4
+  f64.mul
+  f64.const 0.2402284522445722
+  f64.add
+  local.set $6
+  f64.const 0.6931471806916203
+  local.get $4
+  f64.mul
+  f64.const 1
+  f64.add
+  local.set $7
+  local.get $7
+  local.get $6
+  local.get $4
+  local.get $4
+  f64.mul
+  f64.mul
+  f64.add
+  local.set $7
+  local.get $7
+  local.get $8
+  f64.mul
+  local.set $7
+  local.get $7
+  f32.demote_f64
+ )
+ (func $~lib/util/math/powf_lut (param $0 f32) (param $1 f32) (result f32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f32)
+  (local $7 i32)
+  (local $8 f64)
+  (local $9 f64)
+  i32.const 0
+  local.set $2
+  local.get $0
+  i32.reinterpret_f32
+  local.set $3
+  local.get $1
+  i32.reinterpret_f32
+  local.set $4
+  i32.const 0
+  local.set $5
+  local.get $3
+  i32.const 8388608
+  i32.sub
+  i32.const 2139095040
+  i32.const 8388608
+  i32.sub
+  i32.ge_u
+  local.get $4
+  call $~lib/util/math/zeroinfnanf
+  local.tee $5
+  i32.or
+  if
+   local.get $5
    if
-    local.get $6
-    local.set $9
-    local.get $9
-    i64.const 1
-    i64.shl
-    i64.const 1
-    i64.sub
-    i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
+    local.get $4
+    i32.const 1
+    i32.shl
+    i32.const 0
+    i32.eq
     if
-     local.get $6
-     i64.const 1
-     i64.shl
-     i64.const 0
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const -9007199254740992
-     i64.gt_u
-     if (result i32)
-      i32.const 1
-     else
-      local.get $6
-      i64.const 1
-      i64.shl
-      i64.const -9007199254740992
-      i64.gt_u
-     end
-     if
-      local.get $3
-      local.get $2
-      f64.add
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.lt_u
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     i32.eqz
-     i32.eq
-     if
-      f64.const 0
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $2
-     local.get $2
-     f64.mul
-     br $~lib/util/math/pow_lut|inlined.0
+     f32.const 1
+     return
     end
-    local.get $5
-    local.set $9
-    local.get $9
-    i64.const 1
-    i64.shl
-    i64.const 1
-    i64.sub
-    i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
+    local.get $3
+    i32.const 1065353216
+    i32.eq
     if
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $10
-     local.get $5
-     i64.const 63
-     i64.shr_u
-     i32.wrap_i64
-     if (result i32)
-      block $~lib/util/math/checkint|inlined.0 (result i32)
-       local.get $6
-       local.set $9
-       local.get $9
-       i64.const 52
-       i64.shr_u
-       i64.const 2047
-       i64.and
-       local.set $11
-       local.get $11
-       i64.const 1023
-       i64.lt_u
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $11
-       i64.const 1023
-       i64.const 52
-       i64.add
-       i64.gt_u
-       if
-        i32.const 2
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i64.const 1
-       i64.const 1023
-       i64.const 52
-       i64.add
-       local.get $11
-       i64.sub
-       i64.shl
-       local.set $11
-       local.get $9
-       local.get $11
-       i64.const 1
-       i64.sub
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $9
-       local.get $11
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 1
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i32.const 2
-      end
-      i32.const 1
-      i32.eq
-     else
-      i32.const 0
-     end
-     if
-      local.get $10
-      f64.neg
-      local.set $10
-     end
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     if (result f64)
-      f64.const 1
-      local.get $10
-      f64.div
-     else
-      local.get $10
-     end
-     br $~lib/util/math/pow_lut|inlined.0
+     f32.const nan:0x400000
+     return
     end
-    local.get $5
-    i64.const 63
-    i64.shr_u
-    i64.const 0
-    i64.ne
-    if
-     block $~lib/util/math/checkint|inlined.1 (result i32)
-      local.get $6
-      local.set $9
-      local.get $9
-      i64.const 52
-      i64.shr_u
-      i64.const 2047
-      i64.and
-      local.set $11
-      local.get $11
-      i64.const 1023
-      i64.lt_u
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $11
-      i64.const 1023
-      i64.const 52
-      i64.add
-      i64.gt_u
-      if
-       i32.const 2
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i64.const 1
-      i64.const 1023
-      i64.const 52
-      i64.add
-      local.get $11
-      i64.sub
-      i64.shl
-      local.set $11
-      local.get $9
-      local.get $11
-      i64.const 1
-      i64.sub
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $9
-      local.get $11
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 1
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i32.const 2
-     end
-     local.set $12
-     local.get $12
-     i32.const 0
-     i32.eq
-     if
-      local.get $3
-      local.get $3
-      f64.sub
-      local.get $3
-      local.get $3
-      f64.sub
-      f64.div
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $12
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.const 2139095040
+    i32.const 1
+    i32.shl
+    i32.gt_u
+    if (result i32)
      i32.const 1
-     i32.eq
-     if
-      i32.const 262144
-      local.set $4
-     end
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
-     local.get $7
-     i64.const 2047
-     i64.and
-     local.set $7
-    end
-    local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
-    if
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $8
-     i64.const 2047
-     i64.and
-     i64.const 958
-     i64.lt_u
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.gt_u
-     local.get $8
-     i64.const 2048
-     i64.lt_u
-     i32.eq
-     if (result f64)
-      f64.const inf
-     else
-      f64.const 0
-     end
-     br $~lib/util/math/pow_lut|inlined.0
+    else
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.const 2139095040
+     i32.const 1
+     i32.shl
+     i32.gt_u
     end
-    local.get $7
-    i64.const 0
-    i64.eq
     if
-     local.get $3
-     f64.const 4503599627370496
-     f64.mul
-     i64.reinterpret_f64
-     local.set $5
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
-     local.get $5
-     i64.const 52
-     i64.const 52
-     i64.shl
-     i64.sub
-     local.set $5
+     local.get $0
+     local.get $1
+     f32.add
+     return
     end
-   end
-   local.get $5
-   local.set $9
-   local.get $9
-   i64.const 4604531861337669632
-   i64.sub
-   local.set $11
-   local.get $11
-   i64.const 52
-   i64.const 7
-   i64.sub
-   i64.shr_u
-   i64.const 127
-   i64.and
-   i32.wrap_i64
-   local.set $12
-   local.get $11
-   i64.const 52
-   i64.shr_s
-   local.set $13
-   local.get $9
-   local.get $11
-   i64.const 4095
-   i64.const 52
-   i64.shl
-   i64.and
-   i64.sub
-   local.set $14
-   local.get $14
-   f64.reinterpret_i64
-   local.set $10
-   local.get $13
-   f64.convert_i64_s
-   local.set $15
-   i32.const 8
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $16
-   i32.const 8
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=16
-   local.set $17
-   i32.const 8
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=24
-   local.set $18
-   local.get $14
-   i64.const 2147483648
-   i64.add
-   i64.const -4294967296
-   i64.and
-   f64.reinterpret_i64
-   local.set $19
-   local.get $10
-   local.get $19
-   f64.sub
-   local.set $20
-   local.get $19
-   local.get $16
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $21
-   local.get $20
-   local.get $16
-   f64.mul
-   local.set $22
-   local.get $21
-   local.get $22
-   f64.add
-   local.set $23
-   local.get $15
-   f64.const 0.6931471805598903
-   f64.mul
-   local.get $17
-   f64.add
-   local.set $24
-   local.get $24
-   local.get $23
-   f64.add
-   local.set $25
-   local.get $15
-   f64.const 5.497923018708371e-14
-   f64.mul
-   local.get $18
-   f64.add
-   local.set $26
-   local.get $24
-   local.get $25
-   f64.sub
-   local.get $23
-   f64.add
-   local.set $27
-   f64.const -0.5
-   local.get $23
-   f64.mul
-   local.set $28
-   local.get $23
-   local.get $28
-   f64.mul
-   local.set $29
-   local.get $23
-   local.get $29
-   f64.mul
-   local.set $30
-   f64.const -0.5
-   local.get $21
-   f64.mul
-   local.set $31
-   local.get $21
-   local.get $31
-   f64.mul
-   local.set $32
-   local.get $25
-   local.get $32
-   f64.add
-   local.set $33
-   local.get $22
-   local.get $28
-   local.get $31
-   f64.add
-   f64.mul
-   local.set $34
-   local.get $25
-   local.get $33
-   f64.sub
-   local.get $32
-   f64.add
-   local.set $35
-   local.get $30
-   f64.const -0.6666666666666679
-   local.get $23
-   f64.const 0.5000000000000007
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const 0.7999999995323976
-   local.get $23
-   f64.const -0.6666666663487739
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const -1.142909628459501
-   local.get $23
-   f64.const 1.0000415263675542
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.set $36
-   local.get $26
-   local.get $27
-   f64.add
-   local.get $34
-   f64.add
-   local.get $35
-   f64.add
-   local.get $36
-   f64.add
-   local.set $37
-   local.get $33
-   local.get $37
-   f64.add
-   local.set $38
-   local.get $33
-   local.get $38
-   f64.sub
-   local.get $37
-   f64.add
-   global.set $~lib/util/math/log_tail
-   local.get $38
-   local.set $38
-   global.get $~lib/util/math/log_tail
-   local.set $37
-   local.get $6
-   i64.const -134217728
-   i64.and
-   f64.reinterpret_i64
-   local.set $34
-   local.get $2
-   local.get $34
-   f64.sub
-   local.set $33
-   local.get $38
-   i64.reinterpret_f64
-   i64.const -134217728
-   i64.and
-   f64.reinterpret_i64
-   local.set $32
-   local.get $38
-   local.get $32
-   f64.sub
-   local.get $37
-   f64.add
-   local.set $31
-   local.get $34
-   local.get $32
-   f64.mul
-   local.set $36
-   local.get $33
-   local.get $32
-   f64.mul
-   local.get $2
-   local.get $31
-   f64.mul
-   f64.add
-   local.set $35
-   block $~lib/util/math/exp_inline|inlined.0 (result f64)
-    local.get $36
-    local.set $15
-    local.get $35
-    local.set $10
-    local.get $4
-    local.set $12
-    local.get $15
-    i64.reinterpret_f64
-    local.set $9
-    local.get $9
-    i64.const 52
-    i64.shr_u
-    i32.wrap_i64
-    i32.const 2047
-    i32.and
-    local.set $39
-    local.get $39
-    i32.const 969
-    i32.sub
-    i32.const 63
-    i32.ge_u
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.const 1065353216
+    i32.const 1
+    i32.shl
+    i32.eq
     if
-     local.get $39
-     i32.const 969
-     i32.sub
-     i32.const -2147483648
-     i32.ge_u
-     if
-      f64.const -1
-      f64.const 1
-      local.get $12
-      select
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     local.get $39
-     i32.const 1033
-     i32.ge_u
-     if
-      local.get $9
-      i64.const 63
-      i64.shr_u
-      i64.const 0
-      i64.ne
-      if (result f64)
-       local.get $12
-       local.set $41
-       local.get $41
-       local.set $42
-       i64.const 1152921504606846976
-       f64.reinterpret_i64
-       local.set $16
-       local.get $16
-       f64.neg
-       local.get $16
-       local.get $42
-       select
-       local.get $16
-       f64.mul
-      else
-       local.get $12
-       local.set $42
-       local.get $42
-       local.set $41
-       i64.const 8070450532247928832
-       f64.reinterpret_i64
-       local.set $17
-       local.get $17
-       f64.neg
-       local.get $17
-       local.get $41
-       select
-       local.get $17
-       f64.mul
-      end
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     i32.const 0
-     local.set $39
+     f32.const nan:0x400000
+     return
     end
-    f64.const 184.6649652337873
-    local.get $15
-    f64.mul
-    local.set $29
-    local.get $29
-    f64.const 6755399441055744
-    f64.add
-    local.set $30
-    local.get $30
-    i64.reinterpret_f64
-    local.set $14
-    local.get $30
-    f64.const 6755399441055744
-    f64.sub
-    local.set $30
-    local.get $15
-    local.get $30
-    f64.const -0.005415212348111709
-    f64.mul
-    f64.add
-    local.get $30
-    f64.const -1.2864023111638346e-14
-    f64.mul
-    f64.add
-    local.set $28
-    local.get $28
-    local.get $10
-    f64.add
-    local.set $28
-    local.get $14
-    i64.const 127
-    i64.and
-    i64.const 1
-    i64.shl
-    i32.wrap_i64
-    local.set $40
-    local.get $14
-    local.get $12
-    i64.extend_i32_u
-    i64.add
-    i64.const 52
-    i64.const 7
-    i64.sub
-    i64.shl
-    local.set $13
-    i32.const 4104
-    local.get $40
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load
-    f64.reinterpret_i64
-    local.set $25
-    i32.const 4104
-    local.get $40
-    i32.const 3
+    local.get $3
+    i32.const 1
     i32.shl
-    i32.add
-    i64.load offset=8
-    local.get $13
-    i64.add
-    local.set $11
-    local.get $28
-    local.get $28
-    f64.mul
-    local.set $27
-    local.get $25
-    local.get $28
-    f64.add
-    local.get $27
-    f64.const 0.49999999999996786
-    local.get $28
-    f64.const 0.16666666666665886
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $27
-    local.get $27
-    f64.mul
-    f64.const 0.0416666808410674
-    local.get $28
-    f64.const 0.008333335853059549
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $24
-    local.get $39
-    i32.const 0
+    i32.const 1065353216
+    i32.const 1
+    i32.shl
+    i32.lt_u
+    local.get $4
+    i32.const 31
+    i32.shr_u
+    i32.eqz
     i32.eq
     if
-     block $~lib/util/math/specialcase|inlined.0 (result f64)
-      local.get $24
-      local.set $18
-      local.get $11
-      local.set $44
-      local.get $14
-      local.set $43
-      local.get $43
-      i64.const 2147483648
-      i64.and
-      i64.const 0
-      i64.ne
-      i32.eqz
-      if
-       local.get $44
-       i64.const 1009
-       i64.const 52
-       i64.shl
-       i64.sub
-       local.set $44
-       local.get $44
-       f64.reinterpret_i64
-       local.set $17
-       f64.const 5486124068793688683255936e279
-       local.get $17
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       f64.mul
-       br $~lib/util/math/specialcase|inlined.0
-      end
-      local.get $44
-      i64.const 1022
-      i64.const 52
-      i64.shl
-      i64.add
-      local.set $44
-      local.get $44
-      f64.reinterpret_i64
-      local.set $17
-      local.get $17
-      local.get $17
-      local.get $18
-      f64.mul
-      f64.add
-      local.set $16
-      local.get $16
-      f64.abs
-      f64.const 1
-      f64.lt
-      if
-       f64.const 1
-       local.get $16
-       f64.copysign
-       local.set $23
-       local.get $17
-       local.get $16
-       f64.sub
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       local.set $22
-       local.get $23
-       local.get $16
-       f64.add
-       local.set $21
-       local.get $23
-       local.get $21
-       f64.sub
-       local.get $16
-       f64.add
-       local.get $22
-       f64.add
-       local.set $22
-       local.get $21
-       local.get $22
-       f64.add
-       local.get $23
-       f64.sub
-       local.set $16
-       local.get $16
-       f64.const 0
-       f64.eq
-       if
-        local.get $44
-        i64.const -9223372036854775808
-        i64.and
-        f64.reinterpret_i64
-        local.set $16
-       end
-      end
-      local.get $16
-      f64.const 2.2250738585072014e-308
-      f64.mul
-     end
-     br $~lib/util/math/exp_inline|inlined.0
+     f32.const 0
+     return
     end
-    local.get $11
-    f64.reinterpret_i64
-    local.set $26
-    local.get $26
-    local.get $26
-    local.get $24
-    f64.mul
-    f64.add
+    local.get $1
+    local.get $1
+    f32.mul
+    return
    end
-  end
-  return
- )
- (func $~lib/math/NativeMathf.mod (param $0 f32) (param $1 f32) (result f32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 f32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $0
-  i32.reinterpret_f32
-  local.set $2
-  local.get $1
-  i32.reinterpret_f32
-  local.set $3
-  local.get $2
-  i32.const 23
-  i32.shr_u
-  i32.const 255
-  i32.and
-  local.set $4
-  local.get $3
-  i32.const 23
-  i32.shr_u
-  i32.const 255
-  i32.and
-  local.set $5
-  local.get $2
-  i32.const -2147483648
-  i32.and
-  local.set $6
-  local.get $3
-  i32.const 1
-  i32.shl
-  local.set $7
-  local.get $7
-  i32.const 0
-  i32.eq
-  if (result i32)
-   i32.const 1
-  else
-   local.get $4
-   i32.const 255
-   i32.eq
-  end
-  if (result i32)
-   i32.const 1
-  else
-   local.get $1
-   local.get $1
-   f32.ne
-  end
-  if
-   local.get $0
-   local.get $1
-   f32.mul
-   local.set $8
-   local.get $8
-   local.get $8
-   f32.div
-   return
-  end
-  local.get $2
-  i32.const 1
-  i32.shl
-  local.set $9
-  local.get $9
-  local.get $7
-  i32.le_u
-  if
-   local.get $9
-   local.get $7
-   i32.eq
+   local.get $3
+   call $~lib/util/math/zeroinfnanf
    if
-    f32.const 0
+    local.get $0
     local.get $0
     f32.mul
+    local.set $6
+    local.get $3
+    i32.const 31
+    i32.shr_u
+    if (result i32)
+     local.get $4
+     call $~lib/util/math/checkintf
+     i32.const 1
+     i32.eq
+    else
+     i32.const 0
+    end
+    if
+     local.get $6
+     f32.neg
+     local.set $6
+    end
+    local.get $4
+    i32.const 31
+    i32.shr_u
+    if (result f32)
+     f32.const 1
+     local.get $6
+     f32.div
+    else
+     local.get $6
+    end
     return
    end
-   local.get $0
-   return
-  end
-  local.get $4
-  i32.eqz
-  if
-   local.get $4
-   local.get $2
-   i32.const 9
-   i32.shl
-   i32.clz
-   i32.sub
-   local.set $4
-   local.get $2
-   i32.const 0
-   local.get $4
-   i32.sub
-   i32.const 1
-   i32.add
-   i32.shl
-   local.set $2
-  else
-   local.get $2
-   i32.const -1
-   i32.const 9
-   i32.shr_u
-   i32.and
-   local.set $2
-   local.get $2
-   i32.const 1
-   i32.const 23
-   i32.shl
-   i32.or
-   local.set $2
-  end
-  local.get $5
-  i32.eqz
-  if
-   local.get $5
-   local.get $3
-   i32.const 9
-   i32.shl
-   i32.clz
-   i32.sub
-   local.set $5
-   local.get $3
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 1
-   i32.add
-   i32.shl
-   local.set $3
-  else
    local.get $3
-   i32.const -1
-   i32.const 9
+   i32.const 31
    i32.shr_u
-   i32.and
-   local.set $3
-   local.get $3
-   i32.const 1
-   i32.const 23
-   i32.shl
-   i32.or
-   local.set $3
-  end
-  loop $while-continue|0
-   local.get $4
-   local.get $5
-   i32.gt_s
-   local.set $10
-   local.get $10
    if
-    local.get $2
-    local.get $3
-    i32.ge_u
+    local.get $4
+    call $~lib/util/math/checkintf
+    local.set $7
+    local.get $7
+    i32.const 0
+    i32.eq
     if
-     local.get $2
-     local.get $3
-     i32.eq
-     if
-      f32.const 0
-      local.get $0
-      f32.mul
-      return
-     end
-     local.get $2
-     local.get $3
-     i32.sub
-     local.set $2
+     local.get $0
+     local.get $0
+     f32.sub
+     local.get $0
+     local.get $0
+     f32.sub
+     f32.div
+     return
     end
-    local.get $2
-    i32.const 1
-    i32.shl
-    local.set $2
-    local.get $4
+    local.get $7
     i32.const 1
-    i32.sub
-    local.set $4
-    br $while-continue|0
+    i32.eq
+    if
+     i32.const 65536
+     local.set $2
+    end
+    local.get $3
+    i32.const 2147483647
+    i32.and
+    local.set $3
    end
-  end
-  local.get $2
-  local.get $3
-  i32.ge_u
-  if
-   local.get $2
    local.get $3
-   i32.eq
+   i32.const 8388608
+   i32.lt_u
    if
-    f32.const 0
     local.get $0
+    f32.const 8388608
     f32.mul
-    return
+    i32.reinterpret_f32
+    local.set $3
+    local.get $3
+    i32.const 2147483647
+    i32.and
+    local.set $3
+    local.get $3
+    i32.const 23
+    i32.const 23
+    i32.shl
+    i32.sub
+    local.set $3
    end
-   local.get $2
-   local.get $3
-   i32.sub
-   local.set $2
   end
-  local.get $2
-  i32.const 8
-  i32.shl
-  i32.clz
-  local.set $11
-  local.get $4
-  local.get $11
-  i32.sub
-  local.set $4
-  local.get $2
-  local.get $11
-  i32.shl
-  local.set $2
-  local.get $4
-  i32.const 0
-  i32.gt_s
+  local.get $3
+  call $~lib/util/math/log2f_inline
+  local.set $8
+  local.get $1
+  f64.promote_f32
+  local.get $8
+  f64.mul
+  local.set $9
+  local.get $9
+  i64.reinterpret_f64
+  i64.const 47
+  i64.shr_u
+  i64.const 65535
+  i64.and
+  i64.const 32959
+  i64.ge_u
   if
-   local.get $2
-   i32.const 1
-   i32.const 23
-   i32.shl
-   i32.sub
-   local.set $2
-   local.get $2
-   local.get $4
-   i32.const 23
-   i32.shl
-   i32.or
-   local.set $2
-  else
-   local.get $2
-   i32.const 0
-   local.get $4
-   i32.sub
-   i32.const 1
-   i32.add
-   i32.shr_u
-   local.set $2
+   local.get $9
+   f64.const 127.99999995700433
+   f64.gt
+   if
+    local.get $2
+    call $~lib/util/math/oflowf
+    return
+   end
+   local.get $9
+   f64.const -150
+   f64.le
+   if
+    local.get $2
+    call $~lib/util/math/uflowf
+    return
+   end
   end
+  local.get $9
   local.get $2
-  local.get $6
-  i32.or
-  local.set $2
-  local.get $2
-  f32.reinterpret_i32
+  call $~lib/util/math/exp2f_inline
  )
  (func $~lib/math/NativeMathf.pow (param $0 f32) (param $1 f32) (result f32)
-  (local $2 f32)
-  (local $3 f32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 f32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 f64)
-  (local $16 f64)
-  (local $17 f64)
-  (local $18 f64)
-  (local $19 f64)
-  (local $20 f64)
-  (local $21 f64)
-  (local $22 f64)
-  (local $23 i64)
-  (local $24 i64)
   local.get $1
   f32.abs
   f32.const 2
@@ -1326,537 +1763,9 @@
   i32.const 1
   i32.lt_s
   drop
-  block $~lib/util/math/powf_lut|inlined.0 (result f32)
-   local.get $0
-   local.set $3
-   local.get $1
-   local.set $2
-   i32.const 0
-   local.set $4
-   local.get $3
-   i32.reinterpret_f32
-   local.set $5
-   local.get $2
-   i32.reinterpret_f32
-   local.set $6
-   i32.const 0
-   local.set $7
-   local.get $5
-   i32.const 8388608
-   i32.sub
-   i32.const 2139095040
-   i32.const 8388608
-   i32.sub
-   i32.ge_u
-   local.get $6
-   local.set $8
-   local.get $8
-   i32.const 1
-   i32.shl
-   i32.const 1
-   i32.sub
-   i32.const 2139095040
-   i32.const 1
-   i32.shl
-   i32.const 1
-   i32.sub
-   i32.ge_u
-   i32.const 0
-   i32.ne
-   local.tee $7
-   i32.or
-   if
-    local.get $7
-    if
-     local.get $6
-     i32.const 1
-     i32.shl
-     i32.const 0
-     i32.eq
-     if
-      f32.const 1
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
-     i32.const 1065353216
-     i32.eq
-     if
-      f32.const nan:0x400000
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.const 2139095040
-     i32.const 1
-     i32.shl
-     i32.gt_u
-     if (result i32)
-      i32.const 1
-     else
-      local.get $6
-      i32.const 1
-      i32.shl
-      i32.const 2139095040
-      i32.const 1
-      i32.shl
-      i32.gt_u
-     end
-     if
-      local.get $3
-      local.get $2
-      f32.add
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.const 1065353216
-     i32.const 1
-     i32.shl
-     i32.eq
-     if
-      f32.const nan:0x400000
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.const 1065353216
-     i32.const 1
-     i32.shl
-     i32.lt_u
-     local.get $6
-     i32.const 31
-     i32.shr_u
-     i32.eqz
-     i32.eq
-     if
-      f32.const 0
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $2
-     local.get $2
-     f32.mul
-     br $~lib/util/math/powf_lut|inlined.0
-    end
-    local.get $5
-    local.set $8
-    local.get $8
-    i32.const 1
-    i32.shl
-    i32.const 1
-    i32.sub
-    i32.const 2139095040
-    i32.const 1
-    i32.shl
-    i32.const 1
-    i32.sub
-    i32.ge_u
-    if
-     local.get $3
-     local.get $3
-     f32.mul
-     local.set $9
-     local.get $5
-     i32.const 31
-     i32.shr_u
-     if (result i32)
-      block $~lib/util/math/checkintf|inlined.0 (result i32)
-       local.get $6
-       local.set $8
-       local.get $8
-       i32.const 23
-       i32.shr_u
-       i32.const 255
-       i32.and
-       local.set $10
-       local.get $10
-       i32.const 127
-       i32.lt_u
-       if
-        i32.const 0
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       local.get $10
-       i32.const 127
-       i32.const 23
-       i32.add
-       i32.gt_u
-       if
-        i32.const 2
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       i32.const 1
-       i32.const 127
-       i32.const 23
-       i32.add
-       local.get $10
-       i32.sub
-       i32.shl
-       local.set $10
-       local.get $8
-       local.get $10
-       i32.const 1
-       i32.sub
-       i32.and
-       if
-        i32.const 0
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       local.get $8
-       local.get $10
-       i32.and
-       if
-        i32.const 1
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       i32.const 2
-      end
-      i32.const 1
-      i32.eq
-     else
-      i32.const 0
-     end
-     if
-      local.get $9
-      f32.neg
-      local.set $9
-     end
-     local.get $6
-     i32.const 31
-     i32.shr_u
-     if (result f32)
-      f32.const 1
-      local.get $9
-      f32.div
-     else
-      local.get $9
-     end
-     br $~lib/util/math/powf_lut|inlined.0
-    end
-    local.get $5
-    i32.const 31
-    i32.shr_u
-    if
-     block $~lib/util/math/checkintf|inlined.1 (result i32)
-      local.get $6
-      local.set $8
-      local.get $8
-      i32.const 23
-      i32.shr_u
-      i32.const 255
-      i32.and
-      local.set $10
-      local.get $10
-      i32.const 127
-      i32.lt_u
-      if
-       i32.const 0
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      local.get $10
-      i32.const 127
-      i32.const 23
-      i32.add
-      i32.gt_u
-      if
-       i32.const 2
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      i32.const 1
-      i32.const 127
-      i32.const 23
-      i32.add
-      local.get $10
-      i32.sub
-      i32.shl
-      local.set $10
-      local.get $8
-      local.get $10
-      i32.const 1
-      i32.sub
-      i32.and
-      if
-       i32.const 0
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      local.get $8
-      local.get $10
-      i32.and
-      if
-       i32.const 1
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      i32.const 2
-     end
-     local.set $10
-     local.get $10
-     i32.const 0
-     i32.eq
-     if
-      local.get $3
-      local.get $3
-      f32.sub
-      local.get $3
-      local.get $3
-      f32.sub
-      f32.div
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $10
-     i32.const 1
-     i32.eq
-     if
-      i32.const 65536
-      local.set $4
-     end
-     local.get $5
-     i32.const 2147483647
-     i32.and
-     local.set $5
-    end
-    local.get $5
-    i32.const 8388608
-    i32.lt_u
-    if
-     local.get $3
-     f32.const 8388608
-     f32.mul
-     i32.reinterpret_f32
-     local.set $5
-     local.get $5
-     i32.const 2147483647
-     i32.and
-     local.set $5
-     local.get $5
-     i32.const 23
-     i32.const 23
-     i32.shl
-     i32.sub
-     local.set $5
-    end
-   end
-   local.get $5
-   local.set $8
-   local.get $8
-   i32.const 1060306944
-   i32.sub
-   local.set $10
-   local.get $10
-   i32.const 23
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 15
-   i32.and
-   local.set $11
-   local.get $10
-   i32.const -8388608
-   i32.and
-   local.set $12
-   local.get $8
-   local.get $12
-   i32.sub
-   local.set $13
-   local.get $12
-   i32.const 23
-   i32.shr_s
-   local.set $14
-   i32.const 6152
-   local.get $11
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $15
-   i32.const 6152
-   local.get $11
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $16
-   local.get $13
-   f32.reinterpret_i32
-   f64.promote_f32
-   local.set $17
-   local.get $17
-   local.get $15
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $18
-   local.get $16
-   local.get $14
-   f64.convert_i32_s
-   f64.add
-   local.set $19
-   f64.const 0.288457581109214
-   local.get $18
-   f64.mul
-   f64.const -0.36092606229713164
-   f64.add
-   local.set $20
-   f64.const 0.480898481472577
-   local.get $18
-   f64.mul
-   f64.const -0.7213474675006291
-   f64.add
-   local.set $21
-   f64.const 1.4426950408774342
-   local.get $18
-   f64.mul
-   local.get $19
-   f64.add
-   local.set $22
-   local.get $18
-   local.get $18
-   f64.mul
-   local.set $18
-   local.get $22
-   local.get $21
-   local.get $18
-   f64.mul
-   f64.add
-   local.set $22
-   local.get $20
-   local.get $18
-   local.get $18
-   f64.mul
-   f64.mul
-   local.get $22
-   f64.add
-   local.set $20
-   local.get $20
-   local.set $22
-   local.get $2
-   f64.promote_f32
-   local.get $22
-   f64.mul
-   local.set $21
-   local.get $21
-   i64.reinterpret_f64
-   i64.const 47
-   i64.shr_u
-   i64.const 65535
-   i64.and
-   i64.const 32959
-   i64.ge_u
-   if
-    local.get $21
-    f64.const 127.99999995700433
-    f64.gt
-    if
-     local.get $4
-     local.set $8
-     local.get $8
-     local.set $10
-     i32.const 1879048192
-     f32.reinterpret_i32
-     local.set $9
-     local.get $9
-     f32.neg
-     local.get $9
-     local.get $10
-     select
-     local.get $9
-     f32.mul
-     br $~lib/util/math/powf_lut|inlined.0
-    end
-    local.get $21
-    f64.const -150
-    f64.le
-    if
-     local.get $4
-     local.set $11
-     local.get $11
-     local.set $12
-     i32.const 268435456
-     f32.reinterpret_i32
-     local.set $9
-     local.get $9
-     f32.neg
-     local.get $9
-     local.get $12
-     select
-     local.get $9
-     f32.mul
-     br $~lib/util/math/powf_lut|inlined.0
-    end
-   end
-   local.get $21
-   local.set $15
-   local.get $4
-   local.set $13
-   local.get $15
-   f64.const 211106232532992
-   f64.add
-   local.set $20
-   local.get $20
-   i64.reinterpret_f64
-   local.set $23
-   local.get $15
-   local.get $20
-   f64.const 211106232532992
-   f64.sub
-   f64.sub
-   local.set $19
-   i32.const 6408
-   local.get $23
-   i32.wrap_i64
-   i32.const 31
-   i32.and
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load
-   local.set $24
-   local.get $24
-   local.get $23
-   local.get $13
-   i64.extend_i32_u
-   i64.add
-   i64.const 52
-   i64.const 5
-   i64.sub
-   i64.shl
-   i64.add
-   local.set $24
-   local.get $24
-   f64.reinterpret_i64
-   local.set $16
-   f64.const 0.05550361559341535
-   local.get $19
-   f64.mul
-   f64.const 0.2402284522445722
-   f64.add
-   local.set $18
-   f64.const 0.6931471806916203
-   local.get $19
-   f64.mul
-   f64.const 1
-   f64.add
-   local.set $17
-   local.get $17
-   local.get $18
-   local.get $19
-   local.get $19
-   f64.mul
-   f64.mul
-   f64.add
-   local.set $17
-   local.get $17
-   local.get $16
-   f64.mul
-   local.set $17
-   local.get $17
-   f32.demote_f64
-  end
+  local.get $0
+  local.get $1
+  call $~lib/util/math/powf_lut
   return
  )
  (func $~lib/math/NativeMath.mod (param $0 f64) (param $1 f64) (result f64)
diff --git a/tests/compiler/builtins.optimized.wat b/tests/compiler/builtins.optimized.wat
index 5d9fd01018..a16e9a8130 100644
--- a/tests/compiler/builtins.optimized.wat
+++ b/tests/compiler/builtins.optimized.wat
@@ -1,8 +1,8 @@
 (module
  (type $none_=>_none (func))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -53,14 +53,6 @@
   select
   select
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -154,10 +146,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat
index a552c118cc..249c3a7d28 100644
--- a/tests/compiler/call-optional.optimized.wat
+++ b/tests/compiler/call-optional.optimized.wat
@@ -1,8 +1,8 @@
 (module
  (type $none_=>_none (func))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s")
@@ -10,13 +10,6 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "memory" (memory $0))
  (start $~start)
- (func $call-optional/opt (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $2
-  local.get $0
-  local.get $1
-  i32.add
-  i32.add
- )
  (func $call-optional/opt@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
    block $1of2
@@ -35,10 +28,11 @@
    i32.const -2
    local.set $2
   end
+  local.get $2
   local.get $0
   local.get $1
-  local.get $2
-  call $call-optional/opt
+  i32.add
+  i32.add
  )
  (func $~setArgumentsLength (param $0 i32)
   local.get $0
@@ -75,20 +69,6 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3
-  i32.const 4
-  i32.const 5
-  call $call-optional/opt
-  i32.const 12
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 6
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
   i32.const 1
   global.set $~argumentsLength
   i32.const 3
diff --git a/tests/compiler/class-overloading.optimized.wat b/tests/compiler/class-overloading.optimized.wat
index 68a6b7efce..88440f85e3 100644
--- a/tests/compiler/class-overloading.optimized.wat
+++ b/tests/compiler/class-overloading.optimized.wat
@@ -1,7 +1,7 @@
 (module
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
@@ -98,22 +98,13 @@
    local.set $0
   end
   local.get $0
-  i32.eqz
   if (result i32)
+   local.get $0
+  else
    i32.const 3
    call $~lib/rt/stub/__alloc
-  else
-   local.get $0
   end
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -207,10 +198,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -240,25 +239,23 @@
   i32.const 1184
   global.set $class-overloading/which
  )
- (func $class-overloading/D#constructor (param $0 i32) (result i32)
+ (func $class-overloading/E#constructor (param $0 i32) (result i32)
   local.get $0
-  if (result i32)
-   local.get $0
-  else
-   i32.const 6
+  i32.eqz
+  if
+   i32.const 7
    call $~lib/rt/stub/__alloc
+   local.set $0
   end
-  call $class-overloading/B#constructor
- )
- (func $class-overloading/E#constructor (param $0 i32) (result i32)
   local.get $0
-  if (result i32)
-   local.get $0
-  else
-   i32.const 7
+  i32.eqz
+  if
+   i32.const 6
    call $~lib/rt/stub/__alloc
+   local.set $0
   end
-  call $class-overloading/D#constructor
+  local.get $0
+  call $class-overloading/B#constructor
  )
  (func $start:class-overloading
   i32.const 1296
@@ -393,8 +390,9 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 0
-  call $class-overloading/D#constructor
+  i32.const 6
+  call $~lib/rt/stub/__alloc
+  call $class-overloading/B#constructor
   global.set $class-overloading/a
   i32.const 1040
   global.set $class-overloading/which
diff --git a/tests/compiler/class.untouched.wat b/tests/compiler/class.untouched.wat
index 32445315c1..9847f32df1 100644
--- a/tests/compiler/class.untouched.wat
+++ b/tests/compiler/class.untouched.wat
@@ -237,219 +237,214 @@
   i32.store offset=12
   local.get $2
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
    local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
    if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/array/Array<i32>#constructor (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
diff --git a/tests/compiler/do.optimized.wat b/tests/compiler/do.optimized.wat
index d3ce08b230..34794f9177 100644
--- a/tests/compiler/do.optimized.wat
+++ b/tests/compiler/do.optimized.wat
@@ -1,11 +1,12 @@
 (module
- (type $i32_=>_none (func (param i32)))
  (type $none_=>_none (func))
- (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -105,6 +106,31 @@
   i32.const 1
   global.set $do/ran
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -119,7 +145,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -141,7 +167,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -160,23 +186,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -184,61 +210,53 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -246,9 +264,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -257,7 +273,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -280,7 +296,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -294,7 +310,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -307,9 +323,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -318,7 +334,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -327,7 +343,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -345,9 +361,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -367,7 +383,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -400,8 +416,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -422,27 +438,27 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1072
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -471,13 +487,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -485,21 +501,15 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -514,31 +524,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -568,7 +575,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -585,7 +592,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -613,7 +620,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -665,7 +672,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -686,7 +693,8 @@
     unreachable
    end
    i32.const 1216
-   local.tee $0
+   local.set $2
+   i32.const 1216
    i32.const 0
    i32.store
    i32.const 2784
@@ -705,27 +713,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1216
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -745,24 +747,23 @@
    i32.const 1216
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -779,26 +780,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1072
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -812,7 +809,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -882,7 +879,7 @@
     if
      i32.const 0
      i32.const 1072
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -898,7 +895,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -976,22 +973,17 @@
   call $~lib/rt/rtrace/onalloc
   local.get $1
  )
- (func $do/Ref#constructor (result i32)
-  (local $0 i32)
+ (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
-  local.tee $1
+  local.get $0
   i32.const 1216
   i32.gt_u
   if
-   local.get $1
+   local.get $0
    i32.const 16
    i32.sub
-   local.tee $0
+   local.tee $1
    i32.load offset=4
    local.tee $2
    i32.const -268435456
@@ -1010,14 +1002,14 @@
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $0
+   local.get $1
    local.get $2
    i32.const 1
    i32.add
    i32.store offset=4
-   local.get $0
+   local.get $1
    call $~lib/rt/rtrace/onincrement
-   local.get $0
+   local.get $1
    i32.load
    i32.const 1
    i32.and
@@ -1030,9 +1022,169 @@
     unreachable
    end
   end
+  local.get $0
+ )
+ (func $do/testRef
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.set $1
+  loop $do-continue|0
+   local.get $2
+   i32.const 1
+   i32.add
+   local.tee $2
+   i32.const 10
+   i32.eq
+   if
+    i32.const 0
+    local.set $0
+    local.get $1
+    if
+     local.get $1
+     i32.const 1216
+     i32.gt_u
+     if
+      local.get $1
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+    end
+   else
+    call $~lib/rt/tlsf/maybeInitialize
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
+    call $~lib/rt/pure/__retain
+    local.set $0
+    local.get $1
+    i32.const 1216
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+   end
+   local.get $0
+   local.tee $1
+   br_if $do-continue|0
+  end
+  local.get $2
+  i32.const 10
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 150
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 151
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $do/ran
   local.get $1
+  i32.const 1216
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/rt/pure/__release (param $0 i32)
+ (func $do/testRefAutorelease
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.set $0
+  loop $do-continue|0
+   block $do-break|0
+    local.get $1
+    i32.const 1
+    i32.add
+    local.tee $1
+    i32.const 10
+    i32.eq
+    if
+     local.get $0
+     if
+      local.get $0
+      i32.const 1216
+      i32.gt_u
+      if
+       local.get $0
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     i32.const 0
+     local.set $0
+     br $do-break|0
+    end
+    call $~lib/rt/tlsf/maybeInitialize
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
+    call $~lib/rt/pure/__retain
+    local.tee $2
+    local.get $2
+    i32.const 1216
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    br_if $do-continue|0
+   end
+  end
+  local.get $1
+  i32.const 10
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 170
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 171
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $do/ran
   local.get $0
   i32.const 1216
   i32.gt_u
@@ -1046,7 +1198,6 @@
  (func $start:do
   (local $0 i32)
   (local $1 i32)
-  (local $2 i32)
   i32.const 0
   global.set $do/ran
   i32.const 10
@@ -1261,57 +1412,7 @@
   global.set $do/ran
   i32.const 0
   global.set $do/ran
-  call $do/Ref#constructor
-  local.set $0
-  loop $do-continue|04
-   local.get $2
-   i32.const 1
-   i32.add
-   local.tee $2
-   i32.const 10
-   i32.eq
-   if
-    i32.const 0
-    local.set $1
-    local.get $0
-    if
-     local.get $0
-     call $~lib/rt/pure/__release
-    end
-   else
-    call $do/Ref#constructor
-    local.set $1
-    local.get $0
-    call $~lib/rt/pure/__release
-   end
-   local.get $1
-   local.tee $0
-   br_if $do-continue|04
-  end
-  local.get $2
-  i32.const 10
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 150
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 151
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  global.set $do/ran
-  local.get $0
-  call $~lib/rt/pure/__release
+  call $do/testRef
   global.get $do/ran
   i32.eqz
   if
@@ -1324,59 +1425,7 @@
   end
   i32.const 0
   global.set $do/ran
-  i32.const 0
-  local.set $2
-  call $do/Ref#constructor
-  local.set $0
-  loop $do-continue|05
-   block $do-break|0
-    local.get $2
-    i32.const 1
-    i32.add
-    local.tee $2
-    i32.const 10
-    i32.eq
-    if
-     local.get $0
-     if
-      local.get $0
-      call $~lib/rt/pure/__release
-     end
-     i32.const 0
-     local.set $0
-     br $do-break|0
-    end
-    call $do/Ref#constructor
-    local.tee $1
-    call $~lib/rt/pure/__release
-    local.get $1
-    br_if $do-continue|05
-   end
-  end
-  local.get $2
-  i32.const 10
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 170
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 171
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  global.set $do/ran
-  local.get $0
-  call $~lib/rt/pure/__release
+  call $do/testRefAutorelease
   global.get $do/ran
   i32.eqz
   if
diff --git a/tests/compiler/do.untouched.wat b/tests/compiler/do.untouched.wat
index 418a287303..93359ed5ed 100644
--- a/tests/compiler/do.untouched.wat
+++ b/tests/compiler/do.untouched.wat
@@ -2,8 +2,8 @@
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
@@ -440,6 +440,69 @@
   i32.const 1
   global.set $do/ran
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -448,9 +511,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -463,7 +523,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -490,7 +550,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -544,7 +604,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -569,77 +629,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -656,6 +674,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -667,8 +691,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -676,7 +698,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -693,28 +715,18 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -725,44 +737,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -770,30 +772,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 64
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -812,22 +810,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -853,7 +851,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -865,18 +863,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 64
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -930,27 +928,15 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -965,24 +951,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -992,31 +964,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -1024,8 +980,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -1051,24 +1005,22 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -1076,7 +1028,7 @@
    if
     i32.const 0
     i32.const 64
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -1084,16 +1036,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -1109,7 +1061,7 @@
    if
     i32.const 0
     i32.const 64
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -1118,8 +1070,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -1130,49 +1082,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -1185,10 +1133,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -1238,73 +1182,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1317,11 +1234,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1341,7 +1258,7 @@
   if
    i32.const 112
    i32.const 64
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1367,9 +1284,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1437,31 +1351,24 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1474,79 +1381,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 64
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1583,9 +1459,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1599,12 +1473,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1614,7 +1488,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1651,7 +1525,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1702,29 +1576,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1744,7 +1598,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1791,7 +1645,7 @@
      if
       i32.const 0
       i32.const 64
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1812,7 +1666,7 @@
     if
      i32.const 0
      i32.const 64
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1833,7 +1687,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/extends-baseaggregate.optimized.wat b/tests/compiler/extends-baseaggregate.optimized.wat
index e0b0674624..743fb55d3d 100644
--- a/tests/compiler/extends-baseaggregate.optimized.wat
+++ b/tests/compiler/extends-baseaggregate.optimized.wat
@@ -3,11 +3,11 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_none (func))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1028) "\01")
@@ -30,6 +30,31 @@
  (global $~lib/rt/pure/END (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -44,7 +69,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -66,7 +91,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -85,23 +110,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -109,61 +134,53 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -171,9 +188,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -182,7 +197,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -205,7 +220,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -219,7 +234,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -232,9 +247,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -243,7 +258,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -252,7 +267,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -270,9 +285,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -292,7 +307,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -325,8 +340,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -347,27 +362,27 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1136
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -396,13 +411,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -410,21 +425,15 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -439,31 +448,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -493,7 +499,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -510,7 +516,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -538,7 +544,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -590,7 +596,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -611,7 +617,8 @@
     unreachable
    end
    i32.const 1568
-   local.tee $0
+   local.set $2
+   i32.const 1568
    i32.const 0
    i32.store
    i32.const 3136
@@ -630,27 +637,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1568
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -670,7 +671,7 @@
    i32.const 1568
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -679,7 +680,7 @@
   if
    i32.const 1184
    i32.const 1136
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -698,6 +699,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -707,23 +709,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -752,7 +753,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -770,16 +771,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -800,26 +795,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1136
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -837,7 +828,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -882,13 +873,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -908,7 +900,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1000,7 +992,7 @@
     if
      i32.const 0
      i32.const 1136
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1016,7 +1008,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1039,14 +1031,6 @@
   call $~lib/rt/tlsf/prepareBlock
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -1131,183 +1115,185 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
-     end
-     loop $while-continue|1
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $3
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $3
       local.get $4
-      i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
-      end
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
      end
     end
-    loop $while-continue|2
-     local.get $4
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
      if
       local.get $0
-      local.tee $2
-      i32.const 1
-      i32.add
-      local.set $0
       local.get $1
-      local.tee $3
-      i32.const 1
-      i32.add
-      local.set $1
+      i64.load
+      i64.store
       local.get $2
-      local.get $3
-      i32.load8_u
-      i32.store8
-      local.get $4
-      i32.const 1
+      i32.const 8
       i32.sub
-      local.set $4
-      br $while-continue|2
-     end
-    end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+      local.set $2
       local.get $0
-      local.get $4
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
@@ -1355,7 +1341,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -1378,10 +1366,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -1411,7 +1399,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 1564
   i32.ge_u
@@ -1422,161 +1410,171 @@
   end
   local.get $3
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
   (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -1632,7 +1630,7 @@
    local.get $5
    local.get $3
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
    local.get $1
    local.get $4
    i32.ne
@@ -1663,16 +1661,22 @@
  )
  (func $~start
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 20
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.eqz
   if
+   call $~lib/rt/tlsf/maybeInitialize
    i32.const 20
    i32.const 4
-   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    call $~lib/rt/pure/__retain
    local.set $0
   end
@@ -2041,13 +2045,17 @@
       i32.const 256
       i32.gt_u
       select
-      local.tee $4
+      local.set $4
+      call $~lib/rt/tlsf/maybeInitialize
+      local.get $4
       i32.const 0
-      call $~lib/rt/tlsf/__alloc
+      call $~lib/rt/tlsf/allocateBlock
+      i32.const 16
+      i32.add
       local.tee $2
       local.get $1
       local.get $3
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $1
       if
        call $~lib/rt/tlsf/maybeInitialize
diff --git a/tests/compiler/extends-baseaggregate.untouched.wat b/tests/compiler/extends-baseaggregate.untouched.wat
index fd84213021..a202353c9b 100644
--- a/tests/compiler/extends-baseaggregate.untouched.wat
+++ b/tests/compiler/extends-baseaggregate.untouched.wat
@@ -3,8 +3,8 @@
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $none_=>_none (func))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
@@ -37,6 +37,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 556))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -45,9 +108,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -60,7 +120,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -87,7 +147,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -141,7 +201,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -166,77 +226,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -253,6 +271,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -264,8 +288,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -273,7 +295,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -290,28 +312,18 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -322,44 +334,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -367,30 +369,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 128
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -409,22 +407,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -450,7 +448,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -462,18 +460,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 128
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -527,27 +525,15 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -562,24 +548,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -589,31 +561,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -621,8 +577,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -648,24 +602,22 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -673,7 +625,7 @@
    if
     i32.const 0
     i32.const 128
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -681,16 +633,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -706,7 +658,7 @@
    if
     i32.const 0
     i32.const 128
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -715,8 +667,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -727,49 +679,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -782,10 +730,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -835,73 +779,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -914,11 +831,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -938,7 +855,7 @@
   if
    i32.const 176
    i32.const 128
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -964,9 +881,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1034,31 +948,24 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1071,79 +978,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 128
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1180,9 +1056,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1196,12 +1070,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1211,7 +1085,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1248,7 +1122,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1299,29 +1173,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1341,7 +1195,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1388,7 +1242,7 @@
      if
       i32.const 0
       i32.const 128
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1409,7 +1263,7 @@
     if
      i32.const 0
      i32.const 128
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1430,7 +1284,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1603,7 +1457,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -2634,238 +2488,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
-     local.get $3
-     local.set $6
-     local.get $6
-     if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
@@ -2914,22 +2763,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -2940,25 +2779,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
@@ -3011,219 +2850,214 @@
   i32.const 16
   i32.add
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
    local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
    if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
diff --git a/tests/compiler/for.optimized.wat b/tests/compiler/for.optimized.wat
index 5ffcec178e..30577685a6 100644
--- a/tests/compiler/for.optimized.wat
+++ b/tests/compiler/for.optimized.wat
@@ -1,11 +1,12 @@
 (module
- (type $i32_=>_none (func (param i32)))
  (type $none_=>_none (func))
- (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -102,6 +103,31 @@
   i32.const 1
   global.set $for/ran
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -116,7 +142,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -138,7 +164,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -157,23 +183,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -181,61 +207,53 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -243,9 +261,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -254,7 +270,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -277,7 +293,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -291,7 +307,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -304,9 +320,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -315,7 +331,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -324,7 +340,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -342,9 +358,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -364,7 +380,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -397,8 +413,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -419,27 +435,27 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1072
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -468,13 +484,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -482,21 +498,15 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -511,31 +521,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -565,7 +572,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -582,7 +589,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -610,7 +617,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -662,7 +669,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -683,7 +690,8 @@
     unreachable
    end
    i32.const 1216
-   local.tee $0
+   local.set $2
+   i32.const 1216
    i32.const 0
    i32.store
    i32.const 2784
@@ -702,27 +710,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1216
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -742,24 +744,23 @@
    i32.const 1216
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -776,26 +777,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1072
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -809,7 +806,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -879,7 +876,7 @@
     if
      i32.const 0
      i32.const 1072
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -895,7 +892,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -973,22 +970,17 @@
   call $~lib/rt/rtrace/onalloc
   local.get $1
  )
- (func $for/Ref#constructor (result i32)
-  (local $0 i32)
+ (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
-  local.tee $1
+  local.get $0
   i32.const 1216
   i32.gt_u
   if
-   local.get $1
+   local.get $0
    i32.const 16
    i32.sub
-   local.tee $0
+   local.tee $1
    i32.load offset=4
    local.tee $2
    i32.const -268435456
@@ -1007,14 +999,14 @@
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $0
+   local.get $1
    local.get $2
    i32.const 1
    i32.add
    i32.store offset=4
-   local.get $0
+   local.get $1
    call $~lib/rt/rtrace/onincrement
-   local.get $0
+   local.get $1
    i32.load
    i32.const 1
    i32.and
@@ -1027,9 +1019,113 @@
     unreachable
    end
   end
+  local.get $0
+ )
+ (func $for/testRef
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.set $1
+  loop $for-loop|0
+   local.get $1
+   if
+    local.get $2
+    i32.const 1
+    i32.add
+    local.tee $2
+    i32.const 10
+    i32.eq
+    if
+     i32.const 0
+     local.set $0
+     local.get $1
+     if
+      local.get $1
+      i32.const 1216
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+    else
+     call $~lib/rt/tlsf/maybeInitialize
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
+     call $~lib/rt/pure/__retain
+     local.set $0
+     local.get $1
+     i32.const 1216
+     i32.gt_u
+     if
+      local.get $1
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+    end
+    local.get $0
+    local.set $1
+    br $for-loop|0
+   end
+  end
+  local.get $2
+  i32.const 10
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 137
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 138
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $for/ran
   local.get $1
+  i32.const 1216
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/rt/pure/__release (param $0 i32)
+ (func $for/testRefAutorelease
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.set $1
   local.get $0
   i32.const 1216
   i32.gt_u
@@ -1039,27 +1135,115 @@
    i32.sub
    call $~lib/rt/pure/decrement
   end
+  loop $for-loop|0
+   block $for-break0
+    call $~lib/rt/tlsf/maybeInitialize
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
+    call $~lib/rt/pure/__retain
+    local.tee $0
+    local.get $0
+    i32.const 1216
+    i32.gt_u
+    if
+     local.get $0
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    if
+     local.get $3
+     i32.const 1
+     i32.add
+     local.tee $3
+     i32.const 10
+     i32.eq
+     if
+      local.get $1
+      if
+       local.get $1
+       i32.const 1216
+       i32.gt_u
+       if
+        local.get $1
+        i32.const 16
+        i32.sub
+        call $~lib/rt/pure/decrement
+       end
+      end
+      i32.const 0
+      local.set $1
+      br $for-break0
+     end
+     call $~lib/rt/tlsf/maybeInitialize
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
+     call $~lib/rt/pure/__retain
+     local.get $1
+     i32.const 1216
+     i32.gt_u
+     if
+      local.get $1
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.set $1
+     br $for-loop|0
+    end
+   end
+  end
+  local.get $3
+  i32.const 10
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 157
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 158
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $for/ran
+  local.get $1
+  i32.const 1216
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $start:for
   (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
   i32.const 0
   global.set $for/ran
   loop $for-loop|0
-   local.get $1
+   local.get $0
    i32.const 10
    i32.lt_s
    if
-    local.get $1
+    local.get $0
     i32.const 1
     i32.add
-    local.set $1
+    local.set $0
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
   i32.const 10
   i32.ne
   if
@@ -1075,20 +1259,20 @@
   i32.const 0
   global.set $for/ran
   i32.const 0
-  local.set $1
+  local.set $0
   loop $for-loop|00
-   local.get $1
+   local.get $0
    i32.const 10
    i32.lt_s
    if
-    local.get $1
+    local.get $0
     i32.const 1
     i32.add
-    local.set $1
+    local.set $0
     br $for-loop|00
    end
   end
-  local.get $1
+  local.get $0
   i32.const 10
   i32.ne
   if
@@ -1104,20 +1288,20 @@
   i32.const 0
   global.set $for/ran
   i32.const 10
-  local.set $1
+  local.set $0
   loop $for-loop|01
-   local.get $1
+   local.get $0
    i32.const 0
    i32.gt_s
    if
-    local.get $1
+    local.get $0
     i32.const 1
     i32.sub
-    local.set $1
+    local.set $0
     br $for-loop|01
    end
   end
-  local.get $1
+  local.get $0
   if
    i32.const 0
    i32.const 1040
@@ -1131,20 +1315,20 @@
   i32.const 0
   global.set $for/ran
   i32.const 0
-  local.set $1
+  local.set $0
   loop $for-loop|02
-   local.get $1
+   local.get $0
    i32.const 10
    i32.ne
    if
-    local.get $1
+    local.get $0
     i32.const 1
     i32.add
-    local.set $1
+    local.set $0
     br $for-loop|02
    end
   end
-  local.get $1
+  local.get $0
   i32.const 10
   i32.ne
   if
@@ -1160,15 +1344,15 @@
   i32.const 0
   global.set $for/ran
   i32.const 10
-  local.set $1
+  local.set $0
   loop $for-loop|04
-   local.get $1
+   local.get $0
    i32.const 1
    i32.sub
-   local.tee $1
+   local.tee $0
    br_if $for-loop|04
   end
-  local.get $1
+  local.get $0
   if
    i32.const 0
    i32.const 1040
@@ -1182,17 +1366,17 @@
   i32.const 0
   global.set $for/ran
   i32.const 0
-  local.set $1
+  local.set $0
   loop $for-loop|06
-   local.get $1
+   local.get $0
    i32.const 1
    i32.add
-   local.tee $1
+   local.tee $0
    i32.const 10
    i32.ne
    br_if $for-loop|06
   end
-  local.get $1
+  local.get $0
   i32.const 10
   i32.ne
   if
@@ -1212,20 +1396,20 @@
   i32.const 0
   global.set $for/ran
   i32.const 0
-  local.set $1
+  local.set $0
   loop $for-loop|07
-   local.get $1
+   local.get $0
    i32.const 10
    i32.lt_s
    if
-    local.get $1
+    local.get $0
     i32.const 1
     i32.add
-    local.set $1
+    local.set $0
     br $for-loop|07
    end
   end
-  local.get $1
+  local.get $0
   i32.const 10
   i32.ne
   if
@@ -1261,60 +1445,7 @@
   end
   i32.const 0
   global.set $for/ran
-  call $for/Ref#constructor
-  local.set $1
-  loop $for-loop|03
-   local.get $1
-   if
-    local.get $3
-    i32.const 1
-    i32.add
-    local.tee $3
-    i32.const 10
-    i32.eq
-    if
-     i32.const 0
-     local.set $0
-     local.get $1
-     if
-      local.get $1
-      call $~lib/rt/pure/__release
-     end
-    else
-     call $for/Ref#constructor
-     local.set $0
-     local.get $1
-     call $~lib/rt/pure/__release
-    end
-    local.get $0
-    local.set $1
-    br $for-loop|03
-   end
-  end
-  local.get $3
-  i32.const 10
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 137
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 138
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  global.set $for/ran
-  local.get $1
-  call $~lib/rt/pure/__release
+  call $for/testRef
   global.get $for/ran
   i32.eqz
   if
@@ -1327,65 +1458,7 @@
   end
   i32.const 0
   global.set $for/ran
-  call $for/Ref#constructor
-  call $for/Ref#constructor
-  local.set $0
-  call $~lib/rt/pure/__release
-  loop $for-loop|05
-   block $for-break0
-    call $for/Ref#constructor
-    local.tee $1
-    call $~lib/rt/pure/__release
-    local.get $1
-    if
-     local.get $2
-     i32.const 1
-     i32.add
-     local.tee $2
-     i32.const 10
-     i32.eq
-     if
-      local.get $0
-      if
-       local.get $0
-       call $~lib/rt/pure/__release
-      end
-      i32.const 0
-      local.set $0
-      br $for-break0
-     end
-     call $for/Ref#constructor
-     local.get $0
-     call $~lib/rt/pure/__release
-     local.set $0
-     br $for-loop|05
-    end
-   end
-  end
-  local.get $2
-  i32.const 10
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 157
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 158
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  global.set $for/ran
-  local.get $0
-  call $~lib/rt/pure/__release
+  call $for/testRefAutorelease
   global.get $for/ran
   i32.eqz
   if
diff --git a/tests/compiler/for.untouched.wat b/tests/compiler/for.untouched.wat
index 78c447d516..c46ee396d0 100644
--- a/tests/compiler/for.untouched.wat
+++ b/tests/compiler/for.untouched.wat
@@ -3,11 +3,11 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -453,6 +453,69 @@
   i32.const 1
   global.set $for/ran
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -461,9 +524,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -476,7 +536,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -503,7 +563,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -557,7 +617,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -582,77 +642,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -669,6 +687,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -680,8 +704,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -689,7 +711,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -706,28 +728,18 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -738,44 +750,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -783,30 +785,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 64
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -825,22 +823,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -866,7 +864,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -878,18 +876,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 64
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -943,27 +941,15 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -978,24 +964,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -1005,31 +977,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -1037,8 +993,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -1064,24 +1018,22 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -1089,7 +1041,7 @@
    if
     i32.const 0
     i32.const 64
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -1097,16 +1049,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -1122,7 +1074,7 @@
    if
     i32.const 0
     i32.const 64
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -1131,8 +1083,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -1143,49 +1095,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -1198,10 +1146,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -1251,73 +1195,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1330,11 +1247,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1354,7 +1271,7 @@
   if
    i32.const 112
    i32.const 64
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1380,9 +1297,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1450,31 +1364,24 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1487,79 +1394,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 64
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1596,9 +1472,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1612,12 +1486,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1627,7 +1501,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1664,7 +1538,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1715,29 +1589,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1757,7 +1611,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1804,7 +1658,7 @@
      if
       i32.const 0
       i32.const 64
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1825,7 +1679,7 @@
     if
      i32.const 0
      i32.const 64
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1846,7 +1700,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/if.optimized.wat b/tests/compiler/if.optimized.wat
index 30dca3ad0d..eb9826dac2 100644
--- a/tests/compiler/if.optimized.wat
+++ b/tests/compiler/if.optimized.wat
@@ -1,6 +1,5 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -11,7 +10,6 @@
  (export "ifThen" (func $if/ifThen))
  (export "ifThenElseBlock" (func $if/ifThenElse))
  (export "ifAlwaysReturns" (func $if/ifAlwaysReturns))
- (start $~start)
  (func $if/ifThenElse (param $0 i32) (result i32)
   i32.const 1
   i32.const 0
@@ -39,28 +37,4 @@
    unreachable
   end
  )
- (func $~start
-  i32.const 0
-  call $if/ifThen
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 17
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $if/ifThen
-  i32.const 1
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 18
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
 )
diff --git a/tests/compiler/implicit-getter-setter.optimized.wat b/tests/compiler/implicit-getter-setter.optimized.wat
index 454a19e0c9..faaee342fa 100644
--- a/tests/compiler/implicit-getter-setter.optimized.wat
+++ b/tests/compiler/implicit-getter-setter.optimized.wat
@@ -4,10 +4,10 @@
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $none_=>_none (func))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -37,6 +37,31 @@
  (export "Managed#get:foo" (func $implicit-getter-setter/Managed#get:foo))
  (export "Managed#set:foo" (func $implicit-getter-setter/Managed#set:foo))
  (export "Managed#constructor" (func $implicit-getter-setter/Managed#constructor))
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -51,7 +76,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -73,7 +98,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -92,23 +117,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -116,61 +141,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -178,9 +195,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -189,7 +204,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -212,7 +227,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -226,7 +241,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -239,9 +254,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -250,7 +265,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -259,7 +274,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -277,9 +292,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -299,7 +314,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -332,8 +347,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -354,27 +369,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -403,13 +418,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -417,21 +432,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -446,31 +455,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -500,7 +506,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -517,7 +523,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -545,7 +551,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -597,7 +603,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -618,7 +624,8 @@
     unreachable
    end
    i32.const 1232
-   local.tee $0
+   local.set $2
+   i32.const 1232
    i32.const 0
    i32.store
    i32.const 2800
@@ -637,27 +644,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1232
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -677,10 +678,11 @@
    i32.const 1232
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -690,23 +692,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -735,7 +736,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -753,16 +754,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -783,26 +778,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -820,7 +811,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -865,13 +856,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -891,7 +883,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -902,7 +894,7 @@
   if
    i32.const 1088
    i32.const 1040
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1002,7 +994,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1018,7 +1010,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1117,9 +1109,12 @@
   local.get $0
   i32.eqz
   if
+   call $~lib/rt/tlsf/maybeInitialize
    i32.const 4
    i32.const 3
-   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    call $~lib/rt/pure/__retain
    local.set $0
   end
@@ -1141,9 +1136,12 @@
   local.get $0
   i32.eqz
   if
+   call $~lib/rt/tlsf/maybeInitialize
    i32.const 4
    i32.const 4
-   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    call $~lib/rt/pure/__retain
    local.set $0
   end
@@ -1171,7 +1169,14 @@
    call $~lib/rt/pure/__retain
    drop
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 1228
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   local.get $1
diff --git a/tests/compiler/implicit-getter-setter.untouched.wat b/tests/compiler/implicit-getter-setter.untouched.wat
index 0bf24f8ead..00d0972e46 100644
--- a/tests/compiler/implicit-getter-setter.untouched.wat
+++ b/tests/compiler/implicit-getter-setter.untouched.wat
@@ -4,9 +4,9 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_none (func))
  (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
@@ -41,6 +41,69 @@
  (export "Managed#get:foo" (func $implicit-getter-setter/Managed#get:foo))
  (export "Managed#set:foo" (func $implicit-getter-setter/Managed#set:foo))
  (export "Managed#constructor" (func $implicit-getter-setter/Managed#constructor))
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -49,9 +112,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -64,7 +124,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -91,7 +151,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -145,7 +205,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -170,77 +230,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -257,6 +275,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -268,8 +292,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -277,7 +299,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -294,28 +316,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -326,44 +338,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -371,30 +373,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -413,22 +411,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -454,7 +452,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -466,18 +464,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -531,27 +529,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -566,24 +552,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -593,31 +565,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -625,8 +581,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -652,24 +606,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -677,7 +629,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -685,16 +637,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -710,7 +662,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -719,8 +671,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -731,49 +683,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -786,10 +734,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -839,73 +783,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -918,11 +835,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -942,7 +859,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -968,9 +885,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1038,31 +952,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1075,79 +982,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1184,9 +1060,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1200,12 +1074,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1215,7 +1089,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1252,7 +1126,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1303,29 +1177,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1345,7 +1199,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1392,7 +1246,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1413,7 +1267,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1434,7 +1288,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/infer-array.optimized.wat b/tests/compiler/infer-array.optimized.wat
index ebe9642e9f..4ecbebaffe 100644
--- a/tests/compiler/infer-array.optimized.wat
+++ b/tests/compiler/infer-array.optimized.wat
@@ -112,176 +112,178 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
@@ -291,31 +293,31 @@
   i32.const 16
   local.get $2
   call $~lib/rt/stub/__alloc
-  local.set $2
+  local.tee $2
   local.get $0
   local.get $1
   i32.shl
-  local.tee $4
+  local.tee $1
   local.set $5
-  local.get $4
+  local.get $1
   i32.const 0
   call $~lib/rt/stub/__alloc
-  local.set $1
+  local.set $4
   local.get $3
   if
-   local.get $1
+   local.get $4
    local.get $3
    local.get $5
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   end
-  local.get $2
-  local.get $1
+  local.get $4
+  local.tee $3
   i32.store
   local.get $2
-  local.get $1
+  local.get $3
   i32.store offset=4
   local.get $2
-  local.get $4
+  local.get $1
   i32.store offset=8
   local.get $2
   local.get $0
diff --git a/tests/compiler/infer-array.untouched.wat b/tests/compiler/infer-array.untouched.wat
index 3858de811f..a8d38a0988 100644
--- a/tests/compiler/infer-array.untouched.wat
+++ b/tests/compiler/infer-array.untouched.wat
@@ -1,8 +1,8 @@
 (module
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (type $i32_i32_=>_f64 (func (param i32 i32) (result f64)))
@@ -1168,238 +1168,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
diff --git a/tests/compiler/infer-generic.optimized.wat b/tests/compiler/infer-generic.optimized.wat
index 8f605b0703..cc4cd0b2ac 100644
--- a/tests/compiler/infer-generic.optimized.wat
+++ b/tests/compiler/infer-generic.optimized.wat
@@ -2,7 +2,6 @@
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_f32_i32_i32_=>_i32 (func (param i32 f32 i32 i32) (result i32)))
  (type $f32_=>_f32 (func (param f32) (result f32)))
  (memory $0 1)
  (data (i32.const 1024) " \00\00\00\01\00\00\00\01\00\00\00 \00\00\00i\00n\00f\00e\00r\00-\00g\00e\00n\00e\00r\00i\00c\00.\00t\00s")
@@ -15,14 +14,6 @@
  (export "test3" (func $infer-generic/test2))
  (export "test4" (func $infer-generic/test2))
  (start $~start)
- (func $start:infer-generic~anonymous|0 (param $0 i32) (param $1 f32) (param $2 i32) (param $3 i32) (result i32)
-  local.get $1
-  f32.const 0
-  f32.ne
-  i32.const 0
-  local.get $0
-  select
- )
  (func $~setArgumentsLength (param $0 i32)
   nop
  )
@@ -39,20 +30,19 @@
   (local $3 i32)
   i32.const 1132
   i32.load
-  local.set $2
+  local.set $1
   loop $for-loop|0
    local.get $0
-   local.get $2
+   local.get $1
    i32.const 1132
    i32.load
-   local.tee $3
+   local.tee $2
+   local.get $1
    local.get $2
-   local.get $3
    i32.lt_s
    select
    i32.lt_s
    if
-    local.get $1
     i32.const 1124
     i32.load
     local.get $0
@@ -60,10 +50,12 @@
     i32.shl
     i32.add
     f32.load
-    local.get $0
-    i32.const 1120
-    call $start:infer-generic~anonymous|0
-    local.set $1
+    f32.const 0
+    f32.ne
+    i32.const 0
+    local.get $3
+    select
+    local.set $3
     local.get $0
     i32.const 1
     i32.add
diff --git a/tests/compiler/instanceof-class.optimized.wat b/tests/compiler/instanceof-class.optimized.wat
index e1d5c7c1c4..0a53353118 100644
--- a/tests/compiler/instanceof-class.optimized.wat
+++ b/tests/compiler/instanceof-class.optimized.wat
@@ -92,12 +92,13 @@
   i32.const 6
   call $~lib/rt/stub/__alloc
   local.tee $0
-  if (result i32)
-   local.get $0
-  else
+  i32.eqz
+  if
    i32.const 5
    call $~lib/rt/stub/__alloc
+   local.set $0
   end
+  local.get $0
   global.set $instanceof-class/b
   block $__inlined_func$instanceof-class/Child~instanceof (result i32)
    i32.const 0
diff --git a/tests/compiler/issues/1095.optimized.wat b/tests/compiler/issues/1095.optimized.wat
index 555c78f813..430f43707a 100644
--- a/tests/compiler/issues/1095.optimized.wat
+++ b/tests/compiler/issues/1095.optimized.wat
@@ -2,10 +2,11 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -21,6 +22,31 @@
  (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -35,7 +61,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -57,7 +83,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -76,23 +102,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -100,61 +126,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -162,9 +180,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -173,7 +189,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -196,7 +212,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -210,7 +226,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -223,9 +239,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -234,7 +250,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -243,7 +259,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -261,9 +277,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -283,7 +299,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -316,8 +332,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -338,27 +354,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -387,13 +403,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -401,21 +417,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -430,31 +440,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -484,7 +491,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -501,7 +508,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -529,7 +536,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -581,7 +588,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -602,7 +609,8 @@
     unreachable
    end
    i32.const 1264
-   local.tee $0
+   local.set $2
+   i32.const 1264
    i32.const 0
    i32.store
    i32.const 2832
@@ -621,27 +629,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1264
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -661,24 +663,23 @@
    i32.const 1264
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -695,26 +696,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -728,7 +725,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -798,7 +795,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -814,7 +811,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -943,17 +940,6 @@
   end
   local.get $0
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1260
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $~start
   (local $0 i32)
   (local $1 i32)
@@ -989,13 +975,27 @@
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 1260
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $0
   local.get $2
   i32.store
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1260
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/rt/pure/decrement (param $0 i32)
   (local $1 i32)
diff --git a/tests/compiler/issues/1095.untouched.wat b/tests/compiler/issues/1095.untouched.wat
index ababb570f7..b592c2a128 100644
--- a/tests/compiler/issues/1095.untouched.wat
+++ b/tests/compiler/issues/1095.untouched.wat
@@ -1,8 +1,8 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_none (func))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
@@ -27,6 +27,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 252))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -35,9 +98,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -50,7 +110,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -77,7 +137,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -131,7 +191,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -156,77 +216,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -243,6 +261,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -254,8 +278,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -263,7 +285,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -280,28 +302,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -312,44 +324,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -357,30 +359,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -399,22 +397,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -440,7 +438,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -452,18 +450,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -517,27 +515,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -552,24 +538,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -579,31 +551,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -611,8 +567,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -638,24 +592,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -663,7 +615,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -671,16 +623,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -696,7 +648,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -705,8 +657,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -717,49 +669,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -772,10 +720,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -825,73 +769,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -904,11 +821,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -928,7 +845,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -954,9 +871,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1024,31 +938,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1061,79 +968,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1170,9 +1046,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1186,12 +1060,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1201,7 +1075,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1238,7 +1112,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1289,29 +1163,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1331,7 +1185,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1378,7 +1232,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1399,7 +1253,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1420,7 +1274,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/managed-cast.optimized.wat b/tests/compiler/managed-cast.optimized.wat
index 0ed2b2c8b5..3f9d2f519d 100644
--- a/tests/compiler/managed-cast.optimized.wat
+++ b/tests/compiler/managed-cast.optimized.wat
@@ -3,10 +3,11 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -23,6 +24,31 @@
  (global $~started (mut i32) (i32.const 0))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -37,7 +63,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -59,7 +85,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -78,23 +104,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -102,61 +128,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -164,9 +182,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -175,7 +191,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -198,7 +214,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -212,7 +228,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -225,9 +241,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -236,7 +252,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -245,7 +261,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -263,9 +279,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -285,7 +301,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -318,8 +334,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -340,27 +356,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -389,13 +405,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -403,21 +419,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -432,31 +442,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -486,7 +493,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -503,7 +510,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -531,7 +538,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -583,7 +590,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -604,7 +611,8 @@
     unreachable
    end
    i32.const 1280
-   local.tee $0
+   local.set $2
+   i32.const 1280
    i32.const 0
    i32.store
    i32.const 2848
@@ -623,27 +631,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1280
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -663,24 +665,23 @@
    i32.const 1280
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -697,26 +698,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -729,7 +726,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -799,7 +796,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -815,7 +812,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -893,13 +890,6 @@
   call $~lib/rt/rtrace/onalloc
   local.get $2
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -953,28 +943,22 @@
  )
  (func $managed-cast/Cat#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
-  i32.eqz
-  if
-   i32.const 4
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.set $0
-  end
-  local.get $0
- )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1276
-  i32.gt_u
-  if
+  if (result i32)
    local.get $0
+  else
+   call $~lib/rt/tlsf/maybeInitialize
+   i32.const 4
+   call $~lib/rt/tlsf/allocateBlock
    i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
+   i32.add
+   call $~lib/rt/pure/__retain
   end
  )
  (func $~lib/rt/__instanceof (param $0 i32) (result i32)
@@ -1017,6 +1001,7 @@
   (local $6 i32)
   (local $7 i32)
   call $managed-cast/Cat#constructor
+  local.set $2
   call $managed-cast/Cat#constructor
   local.tee $3
   i32.eqz
@@ -1089,21 +1074,78 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $7
-  call $~lib/rt/pure/__release
+  i32.const 1276
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   global.get $~started
diff --git a/tests/compiler/managed-cast.untouched.wat b/tests/compiler/managed-cast.untouched.wat
index 1c3c6de678..dcc156abed 100644
--- a/tests/compiler/managed-cast.untouched.wat
+++ b/tests/compiler/managed-cast.untouched.wat
@@ -2,8 +2,8 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
@@ -29,6 +29,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 268))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -37,9 +100,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -52,7 +112,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -79,7 +139,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -133,7 +193,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -158,77 +218,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -245,6 +263,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -256,8 +280,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -265,7 +287,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -282,28 +304,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -314,44 +326,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -359,30 +361,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -401,22 +399,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -442,7 +440,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -454,18 +452,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -519,27 +517,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -554,24 +540,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -581,31 +553,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -613,8 +569,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -640,24 +594,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -665,7 +617,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -673,16 +625,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -698,7 +650,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -707,8 +659,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -719,49 +671,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -774,10 +722,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -827,73 +771,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -906,11 +823,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -930,7 +847,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -956,9 +873,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1026,31 +940,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1063,79 +970,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1172,9 +1048,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1188,12 +1062,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1203,7 +1077,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1240,7 +1114,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1291,29 +1165,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1333,7 +1187,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1380,7 +1234,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1401,7 +1255,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1422,7 +1276,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/many-locals.optimized.wat b/tests/compiler/many-locals.optimized.wat
index 4c9f7826dd..7d224119fe 100644
--- a/tests/compiler/many-locals.optimized.wat
+++ b/tests/compiler/many-locals.optimized.wat
@@ -1,14 +1,10 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_none (func))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) "\1c\00\00\00\01\00\00\00\01\00\00\00\1c\00\00\00m\00a\00n\00y\00-\00l\00o\00c\00a\00l\00s\00.\00t\00s")
  (export "memory" (memory $0))
  (export "testI32" (func $many-locals/testI32))
  (export "testI8" (func $many-locals/testI8))
- (start $~start)
  (func $many-locals/testI32 (param $0 i32) (result i32)
   local.get $0
  )
@@ -19,18 +15,4 @@
   i32.const 24
   i32.shr_s
  )
- (func $~start
-  i32.const 42
-  call $many-locals/testI8
-  i32.const 42
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 267
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
 )
diff --git a/tests/compiler/memory.optimized.wat b/tests/compiler/memory.optimized.wat
index b9acc22e85..470eb1382a 100644
--- a/tests/compiler/memory.optimized.wat
+++ b/tests/compiler/memory.optimized.wat
@@ -1,7 +1,6 @@
 (module
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1040) "\12\00\00\00\01\00\00\00\01\00\00\00\12\00\00\00m\00e\00m\00o\00r\00y\00.\00t\00s")
@@ -16,7 +15,7 @@
  (global $memory/ptr (mut i32) (i32.const 1088))
  (export "memory" (memory $0))
  (start $~start)
- (func $memory/test (result i32)
+ (func $start:memory
   (local $0 i32)
   i32.const 1024
   i32.const 1024
@@ -26,10 +25,6 @@
   i32.add
   i32.store
   local.get $0
- )
- (func $start:memory
-  (local $0 i32)
-  call $memory/test
   if
    i32.const 0
    i32.const 1056
@@ -38,7 +33,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $memory/test
+  i32.const 1024
+  i32.const 1024
+  i32.load
+  local.tee $0
+  i32.const 1
+  i32.add
+  i32.store
+  local.get $0
   i32.const 1
   i32.ne
   if
@@ -49,7 +51,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $memory/test
+  i32.const 1024
+  i32.const 1024
+  i32.load
+  local.tee $0
+  i32.const 1
+  i32.add
+  i32.store
+  local.get $0
   i32.const 2
   i32.ne
   if
diff --git a/tests/compiler/number.optimized.wat b/tests/compiler/number.optimized.wat
index fd3da8cab3..c247f0ea0d 100644
--- a/tests/compiler/number.optimized.wat
+++ b/tests/compiler/number.optimized.wat
@@ -1,13 +1,15 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $f32_=>_i32 (func (param f32) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i32_i64_i32_i64_i32_i64_=>_i32 (func (param i32 i64 i32 i64 i32 i64) (result i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
+ (type $i32_i64_i64_i32_i64_=>_i32 (func (param i32 i64 i64 i32 i64) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000")
@@ -31,6 +33,9 @@
  (data (i32.const 2448) "\n\00\00\00\01\00\00\00\01\00\00\00\n\00\00\00f\00a\00l\00s\00e")
  (global $number/a (mut i32) (i32.const 1))
  (global $~lib/rt/stub/offset (mut i32) (i32.const 0))
+ (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0))
+ (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0))
+ (global $~lib/util/number/_exp (mut i32) (i32.const 0))
  (global $~lib/util/number/_K (mut i32) (i32.const 0))
  (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0))
  (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0))
@@ -162,7 +167,7 @@
   i32.store offset=12
   local.get $3
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -216,7 +221,7 @@
    local.tee $2
    local.get $0
    local.get $3
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
    local.get $1
    if
     local.get $2
@@ -228,14 +233,6 @@
    i32.const 1040
   end
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -329,10 +326,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -344,42 +349,144 @@
   end
   i32.const 0
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (result i32)
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
+  local.get $3
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (result i32)
+  (local $5 i32)
   (local $6 i32)
-  (local $7 i64)
+  (local $7 i32)
   (local $8 i32)
   (local $9 i64)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i64)
   (local $12 i64)
-  local.get $3
+  local.get $2
   local.get $1
   i64.sub
   local.set $9
-  local.get $3
+  local.get $2
   i64.const 1
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
-  local.tee $10
+  local.tee $8
   i64.extend_i32_s
   i64.shl
-  local.tee $11
+  local.tee $10
   i64.const 1
   i64.sub
-  local.tee $12
+  local.tee $11
   i64.and
-  local.set $7
-  local.get $3
-  local.get $10
+  local.set $1
+  local.get $2
+  local.get $8
   i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $6
+  local.tee $5
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $7
   loop $while-continue|0
-   local.get $4
+   local.get $7
    i32.const 0
    i32.gt_s
    if
@@ -394,281 +501,236 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
+               local.get $7
                i32.const 10
                i32.ne
                if
-                local.get $4
+                local.get $7
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $6
+               local.get $5
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $6
+               local.set $3
+               local.get $5
                i32.const 1000000000
                i32.rem_u
-               local.set $6
+               local.set $5
                br $break|1
               end
-              local.get $6
+              local.get $5
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $6
+              local.set $3
+              local.get $5
               i32.const 100000000
               i32.rem_u
-              local.set $6
+              local.set $5
               br $break|1
              end
-             local.get $6
+             local.get $5
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $6
+             local.set $3
+             local.get $5
              i32.const 10000000
              i32.rem_u
-             local.set $6
+             local.set $5
              br $break|1
             end
-            local.get $6
+            local.get $5
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $6
+            local.set $3
+            local.get $5
             i32.const 1000000
             i32.rem_u
-            local.set $6
+            local.set $5
             br $break|1
            end
-           local.get $6
+           local.get $5
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $6
+           local.set $3
+           local.get $5
            i32.const 100000
            i32.rem_u
-           local.set $6
+           local.set $5
            br $break|1
           end
-          local.get $6
+          local.get $5
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $6
+          local.set $3
+          local.get $5
           i32.const 10000
           i32.rem_u
-          local.set $6
+          local.set $5
           br $break|1
          end
-         local.get $6
+         local.get $5
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $6
+         local.set $3
+         local.get $5
          i32.const 1000
          i32.rem_u
-         local.set $6
+         local.set $5
          br $break|1
         end
-        local.get $6
+        local.get $5
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $6
+        local.set $3
+        local.get $5
         i32.const 100
         i32.rem_u
-        local.set $6
+        local.set $5
         br $break|1
        end
-       local.get $6
+       local.get $5
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $6
+       local.set $3
+       local.get $5
        i32.const 10
        i32.rem_u
-       local.set $6
+       local.set $5
        br $break|1
       end
-      local.get $6
-      local.set $2
+      local.get $5
+      local.set $3
       i32.const 0
-      local.set $6
+      local.set $5
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $8
+    local.get $3
+    local.get $6
     i32.or
     if
      local.get $0
-     local.get $8
+     local.get $6
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $8
+     local.get $6
      i32.const 1
      i32.add
-     local.set $8
+     local.set $6
     end
-    local.get $4
+    local.get $7
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $7
-    local.get $6
+    local.set $7
+    local.get $1
+    local.get $5
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $7
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $6
      local.get $4
+     local.get $2
+     local.get $7
      i32.const 2
      i32.shl
      i32.const 2152
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $8
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $0
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.tee $7
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $7
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $0
-     local.get $4
-     i32.store16
-     local.get $8
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $6
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $1
-  loop $while-continue|4
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $7
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $1
+   local.tee $1
+   local.get $2
    i64.shr_u
-   local.tee $7
-   local.get $8
+   local.tee $12
+   local.get $6
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $8
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
     i32.store16
-    local.get $8
+    local.get $6
     i32.const 1
     i32.add
-    local.set $8
+    local.set $6
    end
-   local.get $4
+   local.get $7
    i32.const 1
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $12
+   local.set $7
+   local.get $1
+   local.get $11
    i64.and
-   local.tee $7
-   local.get $5
+   local.tee $1
+   local.get $4
    i64.ge_u
-   br_if $while-continue|4
+   br_if $while-continue|2
   end
-  local.get $4
+  local.get $7
   global.get $~lib/util/number/_K
   i32.add
   global.set $~lib/util/number/_K
-  local.get $7
-  local.set $1
+  local.get $0
+  local.get $6
+  local.get $4
+  local.get $1
+  local.get $10
   local.get $9
   i32.const 0
-  local.get $4
+  local.get $7
   i32.sub
   i32.const 2
   i32.shl
@@ -676,235 +738,212 @@
   i32.add
   i64.load32_u
   i64.mul
-  local.set $3
+  call $~lib/util/number/grisuRound
+  local.get $6
+ )
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
   local.get $0
-  local.get $8
-  i32.const 1
-  i32.sub
-  i32.const 1
-  i32.shl
-  i32.add
-  local.tee $0
-  i32.load16_u
-  local.set $4
-  loop $while-continue|6
-   i32.const 1
-   local.get $3
-   local.get $1
-   i64.sub
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   local.get $11
-   i64.add
-   local.tee $7
-   local.get $3
-   i64.sub
-   i64.gt_u
-   local.get $7
-   local.get $3
-   i64.lt_u
-   select
-   i32.const 0
-   local.get $5
-   local.get $1
-   i64.sub
-   local.get $11
-   i64.ge_u
-   i32.const 0
-   local.get $1
-   local.get $3
-   i64.lt_u
-   select
-   select
-   if
-    local.get $4
-    i32.const 1
-    i32.sub
-    local.set $4
-    local.get $1
-    local.get $11
-    i64.add
-    local.set $1
-    br $while-continue|6
-   end
-  end
-  local.get $0
-  local.get $4
-  i32.store16
-  local.get $8
- )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
+   i32.const 7
+   i32.and
    i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.get $1
-   i32.lt_u
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $1
+ )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
@@ -989,7 +1028,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $0
     i32.const 46
     i32.store16
@@ -1018,7 +1057,7 @@
      local.get $1
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $0
      i32.const 3014704
      i32.store
@@ -1055,36 +1094,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $1
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       i32.const 2
       i32.add
      else
@@ -1100,7 +1115,7 @@
       local.tee $2
       i32.const 2
       i32.sub
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $0
       i32.const 46
       i32.store16 offset=2
@@ -1111,36 +1126,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $2
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       local.get $1
       i32.add
       i32.const 2
@@ -1150,170 +1141,52 @@
    end
   end
  )
- (func $~lib/util/number/dtoa_core (param $0 i32) (result i32)
-  (local $1 i64)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 f64)
-  i32.const -4
-  global.set $~lib/util/number/_K
-  i32.const 1632
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 2064
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $0
-  local.get $0
-  global.get $~lib/util/number/_frc_pow
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $3
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  i64.const 2147483648
-  i64.mul
-  i64.const 0
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.const 0
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $0
-  i32.const 2
-  i32.add
-  local.get $3
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 1024
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $3
-  i64.const 1024
-  i64.mul
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $1
-  local.get $0
-  i32.const 2
-  i32.add
-  local.get $1
-  local.get $3
-  i64.const 2147483647
-  i64.mul
-  local.get $2
-  i64.const 2147483647
-  i64.mul
-  local.get $2
-  i64.const 4294966784
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $3
-  i64.const 4294966784
-  i64.mul
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  call $~lib/util/number/genDigits
-  global.get $~lib/util/number/_K
-  call $~lib/util/number/prettify
- )
  (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   i32.const 0
   local.get $0
-  call $~lib/string/String#get:length
-  local.tee $4
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $2
+  i32.const 0
+  local.get $2
   i32.lt_s
-  local.set $2
+  select
+  local.tee $3
   local.get $1
   i32.const 0
   local.get $1
   i32.const 0
   i32.gt_s
   select
-  local.tee $3
-  local.get $4
-  i32.lt_s
-  local.set $1
-  i32.const 0
-  local.get $4
+  local.tee $1
   local.get $2
-  select
-  local.tee $2
-  local.get $3
-  local.get $4
   local.get $1
-  select
-  local.tee $3
   local.get $2
+  i32.lt_s
+  select
+  local.tee $1
   local.get $3
+  local.get $1
   i32.gt_s
   select
   i32.const 1
   i32.shl
-  local.tee $1
-  local.get $2
+  local.tee $4
   local.get $3
-  local.get $2
+  local.get $1
   local.get $3
+  local.get $1
   i32.lt_s
   select
   i32.const 1
   i32.shl
-  local.tee $2
+  local.tee $1
   i32.sub
   local.tee $3
   i32.eqz
@@ -1322,12 +1195,12 @@
    return
   end
   i32.const 0
-  local.get $1
   local.get $4
+  local.get $2
   i32.const 1
   i32.shl
   i32.eq
-  local.get $2
+  local.get $1
   select
   if
    local.get $0
@@ -1335,13 +1208,13 @@
   end
   local.get $3
   call $~lib/rt/stub/__alloc
-  local.tee $1
+  local.tee $2
   local.get $0
-  local.get $2
+  local.get $1
   i32.add
   local.get $3
-  call $~lib/memory/memory.copy
-  local.get $1
+  call $~lib/util/memory/memmove
+  local.get $2
  )
  (func $~lib/number/F32.isSafeInteger (param $0 f32) (result i32)
   local.get $0
@@ -1399,6 +1272,8 @@
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
   i32.const 2480
   global.set $~lib/rt/stub/offset
   global.get $number/a
@@ -1416,12 +1291,56 @@
   end
   i32.const 56
   call $~lib/rt/stub/__alloc
-  local.tee $1
-  call $~lib/util/number/dtoa_core
-  local.tee $0
+  local.set $1
+  i64.const -9223372036854774784
+  global.set $~lib/util/number/_frc_plus
+  i64.const 9223372036854775296
+  global.set $~lib/util/number/_frc_minus
+  i32.const -62
+  global.set $~lib/util/number/_exp
+  i32.const -4
+  global.set $~lib/util/number/_K
+  i32.const 1632
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 2064
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $0
+  local.get $1
+  local.get $1
+  i64.const -9223372036854775808
+  global.get $~lib/util/number/_frc_pow
+  local.tee $3
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $3
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $4
+  local.get $0
+  global.get $~lib/util/number/_exp
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $4
+  global.get $~lib/util/number/_frc_minus
+  local.get $3
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  call $~lib/util/number/genDigits
+  global.get $~lib/util/number/_K
+  call $~lib/util/number/prettify
+  local.tee $2
+  local.set $0
+  local.get $2
   i32.const 28
   i32.ne
-  if
+  if (result i32)
    local.get $1
    local.get $0
    call $~lib/string/String#substring
@@ -1466,9 +1385,9 @@
     local.get $2
     global.set $~lib/rt/stub/offset
    end
-   local.set $1
+  else
+   local.get $1
   end
-  local.get $1
   i32.const 2272
   call $~lib/string/String.__eq
   i32.eqz
@@ -1578,11 +1497,11 @@
    unreachable
   end
   global.get $number/a
-  local.tee $1
+  local.tee $0
   i32.const 1
   i32.add
   global.set $number/a
-  local.get $1
+  local.get $0
   call $~lib/number/I32#toString
   i32.const 1072
   call $~lib/string/String.__eq
@@ -1596,11 +1515,11 @@
    unreachable
   end
   global.get $number/a
-  local.tee $1
+  local.tee $0
   i32.const 1
   i32.sub
   global.set $number/a
-  local.get $1
+  local.get $0
   call $~lib/number/I32#toString
   i32.const 2400
   call $~lib/string/String.__eq
diff --git a/tests/compiler/number.untouched.wat b/tests/compiler/number.untouched.wat
index 5f8f7c3b6c..c905e41a96 100644
--- a/tests/compiler/number.untouched.wat
+++ b/tests/compiler/number.untouched.wat
@@ -1,17 +1,21 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_none (func (param i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $f32_=>_i32 (func (param f32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $f64_i32_=>_i32 (func (param f64 i32) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 16) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\000\00")
@@ -360,6 +364,16 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/rt/stub/__retain (param $0 i32) (result i32)
   local.get $0
  )
@@ -367,9 +381,6 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -399,19 +410,9 @@
   call $~lib/rt/stub/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
@@ -649,6 +650,248 @@
   call $~lib/rt/stub/__release
   local.get $2
  )
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
+  local.get $4
+  i32.sub
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $1
+  local.get $5
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
+  local.get $1
+  f64.ne
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 672
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 1368
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $3
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
+    i64.sub
+    local.get $4
+    i64.ge_u
+   else
+    i32.const 0
+   end
+   if (result i32)
+    local.get $3
+    local.get $4
+    i64.add
+    local.get $5
+    i64.lt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
+     local.get $4
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
+    end
+   else
+    i32.const 0
+   end
+   local.set $8
+   local.get $8
+   if
+    local.get $7
+    i32.const 1
+    i32.sub
+    local.set $7
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $6
+  local.get $7
+  i32.store16
+ )
  (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i64)
@@ -664,14 +907,6 @@
   (local $18 i32)
   (local $19 i64)
   (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
   i32.const 0
   local.get $4
   i32.sub
@@ -911,13 +1146,9 @@
      i32.add
      global.set $~lib/util/number/_K
      local.get $0
-     local.set $24
      local.get $15
-     local.set $18
      local.get $5
-     local.set $23
      local.get $19
-     local.set $22
      i32.const 1544
      local.get $14
      i32.const 2
@@ -927,79 +1158,15 @@
      local.get $7
      i64.extend_i32_s
      i64.shl
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  loop $while-continue|2
    i32.const 1
    local.set $16
    local.get $16
@@ -1016,8 +1183,8 @@
     local.get $7
     i64.extend_i32_s
     i64.shr_u
-    local.set $23
-    local.get $23
+    local.set $20
+    local.get $20
     local.get $15
     i64.extend_i32_s
     i64.or
@@ -1026,16 +1193,16 @@
     if
      local.get $0
      local.get $15
-     local.tee $26
+     local.tee $18
      i32.const 1
      i32.add
      local.set $15
-     local.get $26
+     local.get $18
      i32.const 1
      i32.shl
      i32.add
      i32.const 48
-     local.get $23
+     local.get $20
      i32.wrap_i64
      i32.const 65535
      i32.and
@@ -1070,88 +1237,125 @@
      i64.mul
      local.set $10
      local.get $0
-     local.set $18
      local.get $15
-     local.set $27
      local.get $5
-     local.set $28
      local.get $13
-     local.set $22
      local.get $8
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
-    br $while-continue|4
+    br $while-continue|2
    end
   end
   unreachable
  )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $3
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $3
+  i64.const 4503599627370495
+  i64.and
+  local.set $5
+  local.get $4
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
+  i32.const 1
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
+  i32.add
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
+  i64.clz
+  i32.wrap_i64
+  local.set $7
+  local.get $6
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $6
+  local.get $4
+  local.get $7
+  i32.sub
+  local.set $4
+  global.get $~lib/util/number/_frc_pow
+  local.set $8
+  global.get $~lib/util/number/_exp_pow
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $11
+  global.get $~lib/util/number/_frc_plus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.set $12
+  global.get $~lib/util/number/_exp
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $13
+  global.get $~lib/util/number/_frc_minus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  local.set $14
+  local.get $12
+  local.get $14
+  i64.sub
+  local.set $15
+  local.get $1
+  local.get $10
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
  (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2176,248 +2380,269 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $4
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $4
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
      end
-     loop $while-continue|1
-      local.get $3
+    end
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|2
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
+      i32.sub
+      local.tee $2
       i32.add
-      local.set $5
-      local.get $7
-      local.get $4
-      local.tee $7
-      i32.const 1
+      local.get $1
+      local.get $2
       i32.add
-      local.set $4
-      local.get $7
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
-     end
-    end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
-      i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      br $while-continue|3
      end
     end
-    loop $while-continue|5
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
-      i32.const 1
+      local.get $2
+      i32.const 8
       i32.sub
-      local.tee $3
+      local.set $2
+      local.get $0
+      local.get $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
+  end
+ )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.set $2
+  local.get $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
   end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
  )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $2
   i32.eqz
   if
@@ -2600,48 +2825,10 @@
       local.get $0
       i32.const 4
       i32.add
-      local.set $5
       local.get $3
       i32.const 1
       i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $7
+      call $~lib/util/number/genExponent
       local.set $1
       local.get $1
       i32.const 2
@@ -2651,14 +2838,14 @@
       local.get $1
       i32.const 1
       i32.shl
-      local.set $7
+      local.set $4
       local.get $0
       i32.const 4
       i32.add
       local.get $0
       i32.const 2
       i32.add
-      local.get $7
+      local.get $4
       i32.const 2
       i32.sub
       call $~lib/memory/memory.copy
@@ -2666,58 +2853,20 @@
       i32.const 46
       i32.store16 offset=2
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 101
       i32.store16 offset=2
       local.get $1
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 4
       i32.add
-      local.set $9
       local.get $3
       i32.const 1
       i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
+      call $~lib/util/number/genExponent
       i32.add
       local.set $1
       local.get $1
@@ -2736,31 +2885,6 @@
  (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
   local.get $1
   f64.const 0
   f64.lt
@@ -2775,387 +2899,22 @@
    i32.store16
   end
   local.get $1
-  local.set $5
   local.get $0
-  local.set $4
   local.get $2
+  call $~lib/util/number/grisu2
   local.set $3
-  local.get $5
-  i64.reinterpret_f64
-  local.set $6
-  local.get $6
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.set $7
-  local.get $6
-  i64.const 4503599627370495
-  i64.and
-  local.set $8
-  local.get $7
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 672
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 1368
-  local.get $14
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $9
-  local.get $7
-  local.get $14
-  i32.sub
-  local.set $7
-  global.get $~lib/util/number/_frc_pow
-  local.set $12
-  global.get $~lib/util/number/_exp_pow
-  local.set $15
-  local.get $9
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
-  global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
-  i64.const 1
-  i64.sub
-  local.set $25
-  global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
-  local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $26
-  global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
-  i64.const 1
-  i64.add
-  local.set $27
-  local.get $25
-  local.get $27
-  i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
-  local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
-  local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
diff --git a/tests/compiler/object-literal.optimized.wat b/tests/compiler/object-literal.optimized.wat
index e7c00c0c50..f10c318c35 100644
--- a/tests/compiler/object-literal.optimized.wat
+++ b/tests/compiler/object-literal.optimized.wat
@@ -2,12 +2,12 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $none_=>_none (func))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -29,6 +29,31 @@
  (global $~started (mut i32) (i32.const 0))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -43,7 +68,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -65,7 +90,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -84,23 +109,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -108,61 +133,53 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -170,9 +187,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -181,7 +196,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -204,7 +219,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -218,7 +233,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -231,9 +246,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -242,7 +257,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -251,7 +266,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -269,9 +284,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -291,7 +306,7 @@
    if
     i32.const 0
     i32.const 1088
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -324,8 +339,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -346,27 +361,27 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -395,13 +410,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -409,21 +424,15 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -438,31 +447,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -492,7 +498,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -509,7 +515,7 @@
    if
     i32.const 0
     i32.const 1088
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -537,7 +543,7 @@
    if
     i32.const 0
     i32.const 1088
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -589,7 +595,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -610,7 +616,8 @@
     unreachable
    end
    i32.const 1440
-   local.tee $0
+   local.set $2
+   i32.const 1440
    i32.const 0
    i32.store
    i32.const 3008
@@ -629,27 +636,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1440
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -669,10 +670,11 @@
    i32.const 1440
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -682,23 +684,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -727,7 +728,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -745,16 +746,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -775,26 +770,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1088
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -812,7 +803,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -857,13 +848,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -883,7 +875,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -894,7 +886,7 @@
   if
    i32.const 1136
    i32.const 1088
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -994,7 +986,7 @@
     if
      i32.const 0
      i32.const 1088
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1010,7 +1002,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1035,14 +1027,6 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -1094,25 +1078,6 @@
   end
   local.get $0
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1432
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -1206,10 +1171,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -1221,179 +1194,254 @@
   end
   i32.const 0
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/string/String#substring (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const 0
+  i32.const 1036
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.tee $0
+  i32.const 0
+  local.get $0
+  i32.lt_s
+  select
+  local.tee $1
+  i32.const 5
+  local.get $0
+  i32.const 5
+  local.get $0
+  i32.lt_s
+  select
+  local.tee $2
+  local.get $1
+  local.get $2
+  i32.gt_s
+  select
+  i32.const 1
+  i32.shl
+  local.tee $3
+  local.get $1
+  local.get $2
+  local.get $1
+  local.get $2
+  i32.lt_s
+  select
+  i32.const 1
+  i32.shl
+  local.tee $1
+  i32.sub
+  local.tee $2
+  i32.eqz
+  if
+   i32.const 1312
+   return
+  end
+  i32.const 0
+  local.get $3
+  local.get $0
+  i32.const 1
+  i32.shl
+  i32.eq
+  local.get $1
+  select
+  if
+   i32.const 1040
+   return
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $2
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
+  local.get $1
+  i32.const 1040
+  i32.add
+  local.get $2
+  call $~lib/util/memory/memmove
+  local.get $0
+  call $~lib/rt/pure/__retain
+ )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   local.get $1
   local.get $1
@@ -1437,7 +1485,15 @@
   end
   local.get $0
   i32.load offset=4
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 1432
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   i32.const 16
@@ -1472,7 +1528,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -1765,11 +1821,12 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 8
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
@@ -1808,87 +1865,32 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 8
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   i32.const 0
   i32.store
-  local.get $2
+  local.get $1
   i32.const 0
   i32.store offset=4
-  local.get $2
+  local.get $1
   i32.const 123
   i32.store
-  local.get $2
-  block $__inlined_func$~lib/string/String#substring (result i32)
-   i32.const 1312
-   i32.const 0
-   i32.const 1040
-   call $~lib/string/String#get:length
-   local.tee $5
-   i32.const 0
-   local.get $5
-   i32.lt_s
-   select
-   local.tee $4
-   i32.const 5
-   local.get $5
-   i32.const 5
-   local.get $5
-   i32.lt_s
-   select
-   local.tee $1
-   local.get $4
-   local.get $1
-   i32.gt_s
-   select
-   i32.const 1
-   i32.shl
-   local.tee $0
-   local.get $4
-   local.get $1
-   local.get $4
-   local.get $1
-   i32.lt_s
-   select
-   i32.const 1
-   i32.shl
-   local.tee $4
-   i32.sub
-   local.tee $1
-   i32.eqz
-   br_if $__inlined_func$~lib/string/String#substring
-   drop
-   i32.const 1040
-   i32.const 0
-   local.get $0
-   local.get $5
-   i32.const 1
-   i32.shl
-   i32.eq
-   local.get $4
-   select
-   br_if $__inlined_func$~lib/string/String#substring
-   drop
-   local.get $1
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.tee $0
-   local.get $4
-   i32.const 1040
-   i32.add
-   local.get $1
-   call $~lib/memory/memory.copy
-   local.get $0
-   call $~lib/rt/pure/__retain
-  end
+  local.get $1
+  call $~lib/string/String#substring
   i32.store offset=4
-  local.get $2
+  local.get $1
   call $object-literal/testUnmanaged
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 65
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -1976,9 +1978,12 @@
   i32.store8 offset=64
   local.get $0
   call $object-literal/testOmittedTypes
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 0
@@ -2033,9 +2038,12 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 40
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $1
   i32.const 1392
@@ -2091,13 +2099,41 @@
   local.get $1
   call $object-literal/testOmittedFoo
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1432
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1432
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1432
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1432
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   global.get $~started
diff --git a/tests/compiler/object-literal.untouched.wat b/tests/compiler/object-literal.untouched.wat
index 98f6656a59..c2fa2c2bfc 100644
--- a/tests/compiler/object-literal.untouched.wat
+++ b/tests/compiler/object-literal.untouched.wat
@@ -2,10 +2,10 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
@@ -35,6 +35,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 424))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -43,9 +106,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -58,7 +118,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -85,7 +145,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -139,7 +199,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -164,77 +224,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -251,6 +269,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -262,8 +286,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -271,7 +293,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -288,28 +310,18 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -320,44 +332,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -365,30 +367,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 80
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -407,22 +405,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -448,7 +446,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -460,18 +458,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 80
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -525,27 +523,15 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -560,24 +546,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -587,31 +559,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -619,8 +575,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -646,24 +600,22 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -671,7 +623,7 @@
    if
     i32.const 0
     i32.const 80
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -679,16 +631,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -704,7 +656,7 @@
    if
     i32.const 0
     i32.const 80
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -713,8 +665,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -725,49 +677,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -780,10 +728,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -833,73 +777,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -912,11 +829,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -936,7 +853,7 @@
   if
    i32.const 128
    i32.const 80
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -962,9 +879,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1032,31 +946,24 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1069,79 +976,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 80
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1178,9 +1054,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1194,12 +1068,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1209,7 +1083,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1246,7 +1120,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1297,29 +1171,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1339,7 +1193,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1386,7 +1240,7 @@
      if
       i32.const 0
       i32.const 80
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1407,7 +1261,7 @@
     if
      i32.const 0
      i32.const 80
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1428,7 +1282,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -2821,238 +2675,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -3218,7 +3067,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/possibly-null.optimized.wat b/tests/compiler/possibly-null.optimized.wat
index cb9bd243f8..8a344aa5aa 100644
--- a/tests/compiler/possibly-null.optimized.wat
+++ b/tests/compiler/possibly-null.optimized.wat
@@ -49,10 +49,10 @@
    local.get $0
    if
     local.get $1
-    local.get $0
-    local.get $1
-    select
-    local.set $0
+    if
+     local.get $1
+     local.set $0
+    end
     br $while-continue|0
    end
   end
diff --git a/tests/compiler/rc/global-init.untouched.wat b/tests/compiler/rc/global-init.untouched.wat
index 5e52828faa..9a17bd8209 100644
--- a/tests/compiler/rc/global-init.untouched.wat
+++ b/tests/compiler/rc/global-init.untouched.wat
@@ -1,10 +1,13 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
  (import "rtrace" "ondecrement" (func $~lib/rt/rtrace/ondecrement (param i32)))
@@ -138,6 +141,60 @@
  (func $~start
   call $start:rc/global-init
  )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -146,9 +203,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -161,7 +215,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -188,7 +242,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -242,7 +296,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -267,77 +321,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -354,6 +366,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -365,8 +383,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -374,7 +390,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -391,28 +407,18 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -423,44 +429,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -468,30 +464,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 96
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -510,22 +502,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -551,7 +543,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -563,18 +555,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 96
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -628,27 +620,15 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -663,24 +643,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -690,31 +656,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
diff --git a/tests/compiler/rc/local-init.optimized.wat b/tests/compiler/rc/local-init.optimized.wat
index c49de915d2..38faa7d7a4 100644
--- a/tests/compiler/rc/local-init.optimized.wat
+++ b/tests/compiler/rc/local-init.optimized.wat
@@ -1,11 +1,12 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -20,6 +21,31 @@
  (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -34,7 +60,7 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -56,7 +82,7 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -75,23 +101,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -99,61 +125,53 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -161,9 +179,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -172,7 +188,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -195,7 +211,7 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -209,7 +225,7 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -222,9 +238,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -233,7 +249,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -242,7 +258,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -260,9 +276,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -282,7 +298,7 @@
    if
     i32.const 0
     i32.const 1056
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -315,8 +331,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -337,27 +353,27 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1056
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -386,13 +402,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -400,21 +416,15 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -429,31 +439,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -483,7 +490,7 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -500,7 +507,7 @@
    if
     i32.const 0
     i32.const 1056
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -528,7 +535,7 @@
    if
     i32.const 0
     i32.const 1056
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -580,7 +587,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -601,7 +608,8 @@
     unreachable
    end
    i32.const 1200
-   local.tee $0
+   local.set $2
+   i32.const 1200
    i32.const 0
    i32.store
    i32.const 2768
@@ -620,27 +628,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1200
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -660,24 +662,23 @@
    i32.const 1200
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -694,26 +695,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1056
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -727,7 +724,7 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -797,7 +794,7 @@
     if
      i32.const 0
      i32.const 1056
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -813,7 +810,7 @@
   if
    i32.const 0
    i32.const 1056
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/rc/local-init.untouched.wat b/tests/compiler/rc/local-init.untouched.wat
index 3f346a5bc7..56adaf9c7b 100644
--- a/tests/compiler/rc/local-init.untouched.wat
+++ b/tests/compiler/rc/local-init.untouched.wat
@@ -1,13 +1,13 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_none (func))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -40,6 +40,69 @@
  (func $rc/local-init/getRef (result i32)
   i32.const 32
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -48,9 +111,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -63,7 +123,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -90,7 +150,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -144,7 +204,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -169,77 +229,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -256,6 +274,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -267,8 +291,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -276,7 +298,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -293,28 +315,18 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -325,44 +337,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -370,30 +372,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 48
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -412,22 +410,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -453,7 +451,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -465,18 +463,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 48
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -530,27 +528,15 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -565,24 +551,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -592,31 +564,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -624,8 +580,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -651,24 +605,22 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -676,7 +628,7 @@
    if
     i32.const 0
     i32.const 48
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -684,16 +636,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -709,7 +661,7 @@
    if
     i32.const 0
     i32.const 48
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -718,8 +670,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -730,49 +682,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -785,10 +733,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -838,73 +782,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -917,11 +834,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -941,7 +858,7 @@
   if
    i32.const 96
    i32.const 48
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -967,9 +884,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1037,31 +951,24 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1074,79 +981,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 48
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1183,9 +1059,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1199,12 +1073,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1214,7 +1088,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1251,7 +1125,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1302,29 +1176,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1344,7 +1198,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1391,7 +1245,7 @@
      if
       i32.const 0
       i32.const 48
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1412,7 +1266,7 @@
     if
      i32.const 0
      i32.const 48
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1433,7 +1287,7 @@
   if
    i32.const 0
    i32.const 48
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/rc/logical-and-mismatch.optimized.wat b/tests/compiler/rc/logical-and-mismatch.optimized.wat
index 6a906a7a83..058346effa 100644
--- a/tests/compiler/rc/logical-and-mismatch.optimized.wat
+++ b/tests/compiler/rc/logical-and-mismatch.optimized.wat
@@ -1,11 +1,12 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -20,6 +21,31 @@
  (global $rc/logical-and-mismatch/gloRef (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -34,7 +60,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -56,7 +82,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -75,23 +101,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -99,61 +125,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -161,9 +179,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -172,7 +188,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -195,7 +211,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -209,7 +225,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -222,9 +238,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -233,7 +249,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -242,7 +258,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -260,9 +276,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -282,7 +298,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -315,8 +331,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -337,27 +353,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -386,13 +402,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -400,21 +416,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -429,31 +439,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -483,7 +490,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -500,7 +507,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -528,7 +535,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -580,7 +587,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -601,7 +608,8 @@
     unreachable
    end
    i32.const 1184
-   local.tee $0
+   local.set $2
+   i32.const 1184
    i32.const 0
    i32.store
    i32.const 2752
@@ -620,27 +628,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1184
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -660,24 +662,23 @@
    i32.const 1184
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -694,26 +695,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -727,7 +724,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -797,7 +794,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -813,7 +810,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -942,60 +939,109 @@
   end
   local.get $0
  )
- (func $rc/logical-and-mismatch/Ref#constructor (result i32)
+ (func $start:rc/logical-and-mismatch
+  (local $0 i32)
   call $~lib/rt/tlsf/maybeInitialize
   call $~lib/rt/tlsf/allocateBlock
   i32.const 16
   i32.add
   call $~lib/rt/pure/__retain
- )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1184
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
- (func $~start
-  (local $0 i32)
-  call $rc/logical-and-mismatch/Ref#constructor
   global.set $rc/logical-and-mismatch/gloRef
-  call $rc/logical-and-mismatch/Ref#constructor
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
   local.tee $0
   if
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 1184
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    global.get $rc/logical-and-mismatch/gloRef
    call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $rc/logical-and-mismatch/gloRef
   local.tee $0
   if (result i32)
-   call $rc/logical-and-mismatch/Ref#constructor
+   call $~lib/rt/tlsf/maybeInitialize
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   call $~lib/rt/pure/__retain
   else
    local.get $0
    call $~lib/rt/pure/__retain
   end
-  call $~lib/rt/pure/__release
-  call $rc/logical-and-mismatch/Ref#constructor
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
   local.tee $0
   if
    local.get $0
-   call $~lib/rt/pure/__release
-   call $rc/logical-and-mismatch/Ref#constructor
+   i32.const 1184
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   call $~lib/rt/tlsf/maybeInitialize
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $rc/logical-and-mismatch/gloRef
-  call $~lib/rt/pure/__release
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~start
+  call $start:rc/logical-and-mismatch
  )
  (func $~lib/rt/pure/decrement (param $0 i32)
   (local $1 i32)
diff --git a/tests/compiler/rc/logical-and-mismatch.untouched.wat b/tests/compiler/rc/logical-and-mismatch.untouched.wat
index 75a31a6e5d..c28f0e7a9d 100644
--- a/tests/compiler/rc/logical-and-mismatch.untouched.wat
+++ b/tests/compiler/rc/logical-and-mismatch.untouched.wat
@@ -1,13 +1,13 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_none (func))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -26,6 +26,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 176))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -34,9 +97,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -49,7 +109,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -76,7 +136,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -130,7 +190,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -155,77 +215,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -242,6 +260,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -253,8 +277,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -262,7 +284,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -279,28 +301,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -311,44 +323,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -356,30 +358,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -398,22 +396,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -439,7 +437,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -451,18 +449,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -516,27 +514,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -551,24 +537,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -578,31 +550,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -610,8 +566,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -637,24 +591,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -662,7 +614,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -670,16 +622,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -695,7 +647,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -704,8 +656,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -716,49 +668,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -771,10 +719,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -824,73 +768,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -903,11 +820,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -927,7 +844,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -953,9 +870,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1023,31 +937,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1060,79 +967,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1169,9 +1045,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1185,12 +1059,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1200,7 +1074,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1237,7 +1111,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1288,29 +1162,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1330,7 +1184,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1377,7 +1231,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1398,7 +1252,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1419,7 +1273,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/rc/logical-or-mismatch.optimized.wat b/tests/compiler/rc/logical-or-mismatch.optimized.wat
index 946c55476b..06832bb198 100644
--- a/tests/compiler/rc/logical-or-mismatch.optimized.wat
+++ b/tests/compiler/rc/logical-or-mismatch.optimized.wat
@@ -1,11 +1,12 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -20,6 +21,31 @@
  (global $rc/logical-or-mismatch/gloRef (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -34,7 +60,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -56,7 +82,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -75,23 +101,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -99,61 +125,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -161,9 +179,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -172,7 +188,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -195,7 +211,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -209,7 +225,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -222,9 +238,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -233,7 +249,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -242,7 +258,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -260,9 +276,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -282,7 +298,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -315,8 +331,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -337,27 +353,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -386,13 +402,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -400,21 +416,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -429,31 +439,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -483,7 +490,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -500,7 +507,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -528,7 +535,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -580,7 +587,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -601,7 +608,8 @@
     unreachable
    end
    i32.const 1184
-   local.tee $0
+   local.set $2
+   i32.const 1184
    i32.const 0
    i32.store
    i32.const 2752
@@ -620,27 +628,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1184
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -660,24 +662,23 @@
    i32.const 1184
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -694,26 +695,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -727,7 +724,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -797,7 +794,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -813,7 +810,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -942,62 +939,111 @@
   end
   local.get $0
  )
- (func $rc/logical-or-mismatch/Ref#constructor (result i32)
+ (func $start:rc/logical-or-mismatch
+  (local $0 i32)
   call $~lib/rt/tlsf/maybeInitialize
   call $~lib/rt/tlsf/allocateBlock
   i32.const 16
   i32.add
   call $~lib/rt/pure/__retain
- )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1184
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
- (func $~start
-  (local $0 i32)
-  call $rc/logical-or-mismatch/Ref#constructor
   global.set $rc/logical-or-mismatch/gloRef
-  call $rc/logical-or-mismatch/Ref#constructor
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.eqz
   if
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 1184
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    global.get $rc/logical-or-mismatch/gloRef
    call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $rc/logical-or-mismatch/gloRef
   local.tee $0
   if (result i32)
    local.get $0
    call $~lib/rt/pure/__retain
   else
-   call $rc/logical-or-mismatch/Ref#constructor
+   call $~lib/rt/tlsf/maybeInitialize
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   call $~lib/rt/pure/__retain
+  end
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  call $~lib/rt/pure/__release
-  call $rc/logical-or-mismatch/Ref#constructor
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.eqz
   if
    local.get $0
-   call $~lib/rt/pure/__release
-   call $rc/logical-or-mismatch/Ref#constructor
+   i32.const 1184
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   call $~lib/rt/tlsf/maybeInitialize
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   call $~lib/rt/pure/__retain
    local.set $0
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $rc/logical-or-mismatch/gloRef
-  call $~lib/rt/pure/__release
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~start
+  call $start:rc/logical-or-mismatch
  )
  (func $~lib/rt/pure/decrement (param $0 i32)
   (local $1 i32)
diff --git a/tests/compiler/rc/logical-or-mismatch.untouched.wat b/tests/compiler/rc/logical-or-mismatch.untouched.wat
index 05b2addd50..045041d0e2 100644
--- a/tests/compiler/rc/logical-or-mismatch.untouched.wat
+++ b/tests/compiler/rc/logical-or-mismatch.untouched.wat
@@ -1,13 +1,13 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_none (func))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -26,6 +26,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 176))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -34,9 +97,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -49,7 +109,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -76,7 +136,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -130,7 +190,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -155,77 +215,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -242,6 +260,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -253,8 +277,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -262,7 +284,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -279,28 +301,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -311,44 +323,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -356,30 +358,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -398,22 +396,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -439,7 +437,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -451,18 +449,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -516,27 +514,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -551,24 +537,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -578,31 +550,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -610,8 +566,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -637,24 +591,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -662,7 +614,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -670,16 +622,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -695,7 +647,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -704,8 +656,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -716,49 +668,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -771,10 +719,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -824,73 +768,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -903,11 +820,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -927,7 +844,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -953,9 +870,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1023,31 +937,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1060,79 +967,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1169,9 +1045,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1185,12 +1059,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1200,7 +1074,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1237,7 +1111,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1288,29 +1162,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1330,7 +1184,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1377,7 +1231,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1398,7 +1252,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1419,7 +1273,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/rc/optimize.optimized.wat b/tests/compiler/rc/optimize.optimized.wat
index adad34ed33..ebbd81e46a 100644
--- a/tests/compiler/rc/optimize.optimized.wat
+++ b/tests/compiler/rc/optimize.optimized.wat
@@ -1,12 +1,13 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
@@ -40,7 +41,7 @@
  (export "OptimizeARC.eliminates.replaceAlreadyRetained" (func $rc/optimize/eliminated_rr))
  (export "OptimizeARC.keeps.partialRetains" (func $rc/optimize/OptimizeARC.keeps.partialRetains))
  (export "OptimizeARC.keeps.reachesReturn" (func $rc/optimize/OptimizeARC.keeps.reachesReturn))
- (export "FinalizeARC.eliminates.unnecessaryAllocation" (func $rc/optimize/eliminated_v))
+ (export "FinalizeARC.eliminates.unnecessaryAllocation" (func $rc/optimize/FinalizeARC.eliminates.unnecessaryAllocation))
  (export "FinalizeARC.eliminates.unnecessaryPair" (func $rc/optimize/eliminated_vi))
  (export "FinalizeARC.eliminates.unnecessaryStaticPair" (func $rc/optimize/eliminated_v))
  (export "FinalizeARC.eliminates.unnecessaryStaticRetain" (func $rc/optimize/eliminated_v))
@@ -110,6 +111,31 @@
   end
   local.get $0
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -124,7 +150,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -146,7 +172,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -165,23 +191,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -189,61 +215,53 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -251,9 +269,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -262,7 +278,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -285,7 +301,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -299,7 +315,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -312,9 +328,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -323,7 +339,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -332,7 +348,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -350,9 +366,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -372,7 +388,7 @@
    if
     i32.const 0
     i32.const 1088
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -405,8 +421,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -427,27 +443,27 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -476,13 +492,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -490,21 +506,15 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -519,31 +529,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -573,7 +580,7 @@
   if
    i32.const 0
    i32.const 1088
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -590,7 +597,7 @@
    if
     i32.const 0
     i32.const 1088
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -618,7 +625,7 @@
    if
     i32.const 0
     i32.const 1088
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -670,7 +677,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -691,7 +698,8 @@
     unreachable
    end
    i32.const 1216
-   local.tee $0
+   local.set $2
+   i32.const 1216
    i32.const 0
    i32.store
    i32.const 2784
@@ -710,27 +718,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1216
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -750,28 +752,94 @@
    i32.const 1216
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
- (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
-  (local $1 i32)
+ (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 256
+  i32.lt_u
+  if
+   local.get $1
+   i32.const 4
+   i32.shr_u
+   local.set $1
+  else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
+   local.get $1
+   i32.const 536870904
+   i32.lt_u
+   select
+   local.tee $1
+   i32.const 31
+   local.get $1
+   i32.clz
+   i32.sub
+   local.tee $2
+   i32.const 4
+   i32.sub
+   i32.shr_u
+   i32.const 16
+   i32.xor
+   local.set $1
+   local.get $2
+   i32.const 7
+   i32.sub
+   local.set $2
+  end
+  local.get $1
+  i32.const 16
+  i32.lt_u
+  i32.const 0
+  local.get $2
+  i32.const 23
+  i32.lt_u
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 330
+   i32.const 14
+   call $~lib/builtins/abort
+   unreachable
+  end
   local.get $0
+  local.get $2
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
-  i32.const -2
+  i32.const -1
+  local.get $1
+  i32.shl
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
    local.get $2
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
-   i32.const -2
+   i32.const -1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.shl
    i32.and
    local.tee $1
    if (result i32)
@@ -784,47 +852,142 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1088
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
   end
  )
- (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
+ (func $~lib/rt/tlsf/prepareBlock (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.load
+  local.set $3
+  local.get $2
+  i32.const 15
+  i32.and
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 357
+   i32.const 14
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const -4
+  i32.and
+  local.get $2
+  i32.sub
+  local.tee $4
+  i32.const 32
+  i32.ge_u
+  if
+   local.get $1
+   local.get $2
+   local.get $3
+   i32.const 2
+   i32.and
+   i32.or
+   i32.store
+   local.get $2
+   local.get $1
+   i32.const 16
+   i32.add
+   i32.add
+   local.tee $1
+   local.get $4
+   i32.const 16
+   i32.sub
+   i32.const 1
+   i32.or
+   i32.store
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/insertBlock
+  else
+   local.get $1
+   local.get $3
+   i32.const -2
+   i32.and
+   i32.store
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   local.get $1
+   i32.const 16
+   i32.add
+   local.get $1
+   i32.load
+   i32.const -4
+   i32.and
+   i32.add
+   i32.load
+   i32.const -3
+   i32.and
+   i32.store
+  end
+ )
+ (func $~lib/rt/tlsf/allocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
   global.get $~lib/rt/tlsf/collectLock
   if
    i32.const 0
    i32.const 1088
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $1
+  i32.const 1073741808
+  i32.ge_u
+  if
+   i32.const 1136
+   i32.const 1088
+   i32.const 453
+   i32.const 30
+   call $~lib/builtins/abort
+   unreachable
+  end
   local.get $0
+  local.get $1
+  i32.const 15
+  i32.add
+  i32.const -16
+  i32.and
+  local.tee $3
+  i32.const 16
+  local.get $3
+  i32.const 16
+  i32.gt_u
+  select
+  local.tee $4
   call $~lib/rt/tlsf/searchBlock
-  local.tee $1
+  local.tee $3
   i32.eqz
   if
    i32.const 1
@@ -832,13 +995,14 @@
    i32.const 0
    global.set $~lib/rt/tlsf/collectLock
    local.get $0
+   local.get $4
    call $~lib/rt/tlsf/searchBlock
-   local.tee $1
+   local.tee $3
    i32.eqz
    if
     i32.const 16
     memory.size
-    local.tee $2
+    local.tee $3
     i32.const 16
     i32.shl
     i32.const 16
@@ -847,24 +1011,40 @@
     i32.load offset=1568
     i32.ne
     i32.shl
-    i32.const 65551
+    local.get $4
+    i32.const 1
+    i32.const 27
+    local.get $4
+    i32.clz
+    i32.sub
+    i32.shl
+    i32.const 1
+    i32.sub
+    i32.add
+    local.get $4
+    local.get $4
+    i32.const 536870904
+    i32.lt_u
+    select
+    i32.add
+    i32.const 65535
     i32.add
     i32.const -65536
     i32.and
     i32.const 16
     i32.shr_u
-    local.set $1
-    local.get $2
-    local.get $1
-    local.get $2
-    local.get $1
+    local.set $5
+    local.get $3
+    local.get $5
+    local.get $3
+    local.get $5
     i32.gt_s
     select
     memory.grow
     i32.const 0
     i32.lt_s
     if
-     local.get $1
+     local.get $5
      memory.grow
      i32.const 0
      i32.lt_s
@@ -873,7 +1053,7 @@
      end
     end
     local.get $0
-    local.get $2
+    local.get $3
     i32.const 16
     i32.shl
     memory.size
@@ -881,126 +1061,67 @@
     i32.shl
     call $~lib/rt/tlsf/addMemory
     local.get $0
+    local.get $4
     call $~lib/rt/tlsf/searchBlock
-    local.tee $1
+    local.tee $3
     i32.eqz
     if
      i32.const 0
      i32.const 1088
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
     end
    end
   end
-  local.get $1
+  local.get $3
   i32.load
   i32.const -4
   i32.and
-  i32.const 16
+  local.get $4
   i32.lt_u
   if
    i32.const 0
    i32.const 1088
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $1
-  i32.const 3
+  local.get $3
+  local.get $2
   i32.store offset=8
+  local.get $3
   local.get $1
-  i32.const 0
   i32.store offset=12
   local.get $0
-  local.get $1
+  local.get $3
   call $~lib/rt/tlsf/removeBlock
-  local.get $1
-  i32.load
-  local.tee $2
-  i32.const -4
-  i32.and
-  i32.const 16
-  i32.sub
-  local.tee $3
-  i32.const 32
-  i32.ge_u
-  if
-   local.get $1
-   local.get $2
-   i32.const 2
-   i32.and
-   i32.const 16
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 32
-   i32.add
-   local.tee $2
-   local.get $3
-   i32.const 16
-   i32.sub
-   i32.const 1
-   i32.or
-   i32.store
-   local.get $0
-   local.get $2
-   call $~lib/rt/tlsf/insertBlock
-  else
-   local.get $1
-   local.get $2
-   i32.const -2
-   i32.and
-   i32.store
-   local.get $1
-   i32.const 16
-   i32.add
-   local.tee $0
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   local.get $0
-   local.get $1
-   i32.load
-   i32.const -4
-   i32.and
-   i32.add
-   i32.load
-   i32.const -3
-   i32.and
-   i32.store
-  end
-  local.get $1
+  local.get $0
+  local.get $3
+  local.get $4
+  call $~lib/rt/tlsf/prepareBlock
+  local.get $3
   call $~lib/rt/rtrace/onalloc
-  local.get $1
+  local.get $3
  )
  (func $rc/optimize/getRef (result i32)
   call $~lib/rt/tlsf/maybeInitialize
+  i32.const 0
+  i32.const 3
   call $~lib/rt/tlsf/allocateBlock
   i32.const 16
   i32.add
   call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1204
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $rc/optimize/eliminated_rr (param $0 i32) (result i32)
   call $~lib/rt/tlsf/maybeInitialize
+  i32.const 0
+  i32.const 3
   call $~lib/rt/tlsf/allocateBlock
   i32.const 16
   i32.add
@@ -1020,13 +1141,20 @@
  )
  (func $rc/optimize/OptimizeARC.keeps.partialRetains (param $0 i32) (param $1 i32)
   local.get $1
-  if (result i32)
+  if
    local.get $0
    call $~lib/rt/pure/__retain
-  else
+   local.set $0
+  end
+  local.get $0
+  i32.const 1204
+  i32.gt_u
+  if
    local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  call $~lib/rt/pure/__release
  )
  (func $rc/optimize/OptimizeARC.keeps.reachesReturn (param $0 i32) (param $1 i32) (result i32)
   local.get $0
@@ -1038,9 +1166,35 @@
    return
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1204
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
  )
+ (func $rc/optimize/FinalizeARC.eliminates.unnecessaryAllocation
+  (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 1
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1204
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
  (func $rc/optimize/FinalizeARC.keeps.dynamicRetain (param $0 i32)
   local.get $0
   call $~lib/rt/pure/__retain
@@ -1048,7 +1202,14 @@
  )
  (func $rc/optimize/FinalizeARC.keeps.dynamicRelease (param $0 i32)
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1204
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/rt/pure/decrement (param $0 i32)
   (local $1 i32)
diff --git a/tests/compiler/rc/optimize.untouched.wat b/tests/compiler/rc/optimize.untouched.wat
index 2504b02101..2c31dbbaec 100644
--- a/tests/compiler/rc/optimize.untouched.wat
+++ b/tests/compiler/rc/optimize.untouched.wat
@@ -1,13 +1,13 @@
 (module
- (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_none (func))
+ (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
@@ -129,6 +129,69 @@
   end
   local.get $0
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -137,9 +200,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -152,7 +212,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -179,7 +239,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -233,7 +293,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -258,77 +318,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -345,6 +363,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -356,8 +380,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -365,7 +387,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -382,28 +404,18 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -414,44 +426,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -459,30 +461,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 80
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -501,22 +499,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -542,7 +540,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -554,18 +552,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 80
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -619,27 +617,15 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -654,24 +640,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -681,31 +653,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -713,8 +669,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -740,24 +694,22 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -765,7 +717,7 @@
    if
     i32.const 0
     i32.const 80
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -773,16 +725,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -798,7 +750,7 @@
    if
     i32.const 0
     i32.const 80
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -807,8 +759,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -819,49 +771,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -874,10 +822,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -927,73 +871,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1006,11 +923,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1030,7 +947,7 @@
   if
    i32.const 128
    i32.const 80
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1056,9 +973,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1126,31 +1040,24 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1163,79 +1070,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 80
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1272,9 +1148,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1288,12 +1162,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1303,7 +1177,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1340,7 +1214,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1391,29 +1265,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1433,7 +1287,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1480,7 +1334,7 @@
      if
       i32.const 0
       i32.const 80
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1501,7 +1355,7 @@
     if
      i32.const 0
      i32.const 80
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1522,7 +1376,7 @@
   if
    i32.const 0
    i32.const 80
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/rc/rereturn.optimized.wat b/tests/compiler/rc/rereturn.optimized.wat
index 160b6e5eb6..f09ba07013 100644
--- a/tests/compiler/rc/rereturn.optimized.wat
+++ b/tests/compiler/rc/rereturn.optimized.wat
@@ -1,13 +1,13 @@
 (module
+ (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
@@ -21,8 +21,34 @@
  (export "__alloc" (func $~lib/rt/tlsf/__alloc))
  (export "__retain" (func $~lib/rt/pure/__retain))
  (export "__release" (func $~lib/rt/pure/__release))
- (export "__collect" (func $~start))
+ (export "__collect" (func $~lib/rt/pure/__collect))
  (export "__rtti_base" (global $~lib/rt/__rtti_base))
+ (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -37,7 +63,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -59,7 +85,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -78,23 +104,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -102,61 +128,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -164,9 +182,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -175,7 +191,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -198,7 +214,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -212,7 +228,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -225,9 +241,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -236,7 +252,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -245,7 +261,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -263,9 +279,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -285,7 +301,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -318,8 +334,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -340,27 +356,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -389,13 +405,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -403,21 +419,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -432,31 +442,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -486,7 +493,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -503,7 +510,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -531,7 +538,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -583,7 +590,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -604,7 +611,8 @@
     unreachable
    end
    i32.const 1232
-   local.tee $0
+   local.set $2
+   i32.const 1232
    i32.const 0
    i32.store
    i32.const 2800
@@ -623,27 +631,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1232
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -663,10 +665,11 @@
    i32.const 1232
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -676,23 +679,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -721,7 +723,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -739,16 +741,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -769,26 +765,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -806,7 +798,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -851,13 +843,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -877,7 +870,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -888,7 +881,7 @@
   if
    i32.const 1088
    i32.const 1040
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -988,7 +981,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1004,7 +997,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1096,6 +1089,25 @@
   end
  )
  (func $~start
+  (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 0
+  i32.const 3
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1220
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/rt/pure/__collect
   nop
  )
  (func $~lib/rt/pure/decrement (param $0 i32)
diff --git a/tests/compiler/rc/rereturn.untouched.wat b/tests/compiler/rc/rereturn.untouched.wat
index 86eaab64c7..a5171d55c2 100644
--- a/tests/compiler/rc/rereturn.untouched.wat
+++ b/tests/compiler/rc/rereturn.untouched.wat
@@ -1,9 +1,9 @@
 (module
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $none_=>_i32 (func (result i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
@@ -28,6 +28,69 @@
  (export "__collect" (func $~lib/rt/pure/__collect))
  (export "__rtti_base" (global $~lib/rt/__rtti_base))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -36,9 +99,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -51,7 +111,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -78,7 +138,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -132,7 +192,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -157,77 +217,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -244,6 +262,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -255,8 +279,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -264,7 +286,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -281,28 +303,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -313,44 +325,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -358,30 +360,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -400,22 +398,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -441,7 +439,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -453,18 +451,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -518,27 +516,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -553,24 +539,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -580,31 +552,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -612,8 +568,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -639,24 +593,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -664,7 +616,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -672,16 +624,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -697,7 +649,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -706,8 +658,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -718,49 +670,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -773,10 +721,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -826,73 +770,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -905,11 +822,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -929,7 +846,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -955,9 +872,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1025,31 +939,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1062,79 +969,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1171,9 +1047,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1187,12 +1061,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1202,7 +1076,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1239,7 +1113,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1290,29 +1164,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1332,7 +1186,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1379,7 +1233,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1400,7 +1254,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1421,7 +1275,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/rc/ternary-mismatch.optimized.wat b/tests/compiler/rc/ternary-mismatch.optimized.wat
index ae587c4e1a..f19bfca958 100644
--- a/tests/compiler/rc/ternary-mismatch.optimized.wat
+++ b/tests/compiler/rc/ternary-mismatch.optimized.wat
@@ -2,10 +2,11 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -22,6 +23,31 @@
  (export "test1" (func $rc/ternary-mismatch/test1))
  (export "test2" (func $rc/ternary-mismatch/test2))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -36,7 +62,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -58,7 +84,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -77,23 +103,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -101,61 +127,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -163,9 +181,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -174,7 +190,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -197,7 +213,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -211,7 +227,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -224,9 +240,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -235,7 +251,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -244,7 +260,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -262,9 +278,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -284,7 +300,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -317,8 +333,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -339,27 +355,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -388,13 +404,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -402,21 +418,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -431,31 +441,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -485,7 +492,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -502,7 +509,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -530,7 +537,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -582,7 +589,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -603,7 +610,8 @@
     unreachable
    end
    i32.const 1184
-   local.tee $0
+   local.set $2
+   i32.const 1184
    i32.const 0
    i32.store
    i32.const 2752
@@ -622,27 +630,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1184
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -662,24 +664,23 @@
    i32.const 1184
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -696,26 +697,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -729,7 +726,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -799,7 +796,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -815,7 +812,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -944,59 +941,100 @@
   end
   local.get $0
  )
- (func $rc/ternary-mismatch/Ref#constructor (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
-  call $~lib/rt/pure/__retain
- )
  (func $rc/ternary-mismatch/test1 (param $0 i32) (result i32)
   local.get $0
   if (result i32)
-   call $rc/ternary-mismatch/Ref#constructor
+   call $~lib/rt/tlsf/maybeInitialize
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   call $~lib/rt/pure/__retain
   else
    global.get $rc/ternary-mismatch/gloRef
    call $~lib/rt/pure/__retain
   end
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1184
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $rc/ternary-mismatch/test2 (param $0 i32) (result i32)
   local.get $0
   if (result i32)
    global.get $rc/ternary-mismatch/gloRef
    call $~lib/rt/pure/__retain
   else
-   call $rc/ternary-mismatch/Ref#constructor
+   call $~lib/rt/tlsf/maybeInitialize
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   call $~lib/rt/pure/__retain
   end
  )
  (func $~start
-  call $rc/ternary-mismatch/Ref#constructor
+  (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
   global.set $rc/ternary-mismatch/gloRef
-  i32.const 1
-  call $rc/ternary-mismatch/test1
-  call $~lib/rt/pure/__release
-  i32.const 0
-  call $rc/ternary-mismatch/test1
-  call $~lib/rt/pure/__release
-  i32.const 1
-  call $rc/ternary-mismatch/test2
-  call $~lib/rt/pure/__release
-  i32.const 0
-  call $rc/ternary-mismatch/test2
-  call $~lib/rt/pure/__release
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $rc/ternary-mismatch/gloRef
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $rc/ternary-mismatch/gloRef
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $rc/ternary-mismatch/gloRef
-  call $~lib/rt/pure/__release
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/rt/pure/decrement (param $0 i32)
   (local $1 i32)
diff --git a/tests/compiler/rc/ternary-mismatch.untouched.wat b/tests/compiler/rc/ternary-mismatch.untouched.wat
index f502716e41..0ccbc2d0f9 100644
--- a/tests/compiler/rc/ternary-mismatch.untouched.wat
+++ b/tests/compiler/rc/ternary-mismatch.untouched.wat
@@ -1,13 +1,13 @@
 (module
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -28,6 +28,69 @@
  (export "test1" (func $rc/ternary-mismatch/test1))
  (export "test2" (func $rc/ternary-mismatch/test2))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -36,9 +99,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -51,7 +111,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -78,7 +138,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -132,7 +192,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -157,77 +217,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -244,6 +262,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -255,8 +279,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -264,7 +286,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -281,28 +303,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -313,44 +325,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -358,30 +360,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -400,22 +398,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -441,7 +439,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -453,18 +451,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -518,27 +516,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -553,24 +539,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -580,31 +552,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -612,8 +568,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -639,24 +593,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -664,7 +616,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -672,16 +624,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -697,7 +649,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -706,8 +658,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -718,49 +670,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -773,10 +721,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -826,73 +770,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -905,11 +822,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -929,7 +846,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -955,9 +872,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1025,31 +939,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1062,79 +969,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1171,9 +1047,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1187,12 +1061,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1202,7 +1076,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1239,7 +1113,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1290,29 +1164,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1332,7 +1186,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1379,7 +1233,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1400,7 +1254,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1421,7 +1275,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/resolve-access.optimized.wat b/tests/compiler/resolve-access.optimized.wat
index bd61fa52a9..726786e136 100644
--- a/tests/compiler/resolve-access.optimized.wat
+++ b/tests/compiler/resolve-access.optimized.wat
@@ -103,86 +103,44 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/memory/memory.copy (param $0 i32)
+ (func $~lib/util/memory/memmove (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  i32.const 1040
-  local.set $1
   i32.const 8
   local.set $4
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   i32.const 1040
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+  i32.const 1040
+  local.set $1
+  local.get $0
+  i32.const 1040
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  i32.const 1040
+  i32.lt_u
+  if
    local.get $0
-   i32.const 1040
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eqz
    if
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eqz
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
       local.get $4
-      i32.const 8
-      i32.ge_u
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $4
+      i32.const 1
+      i32.sub
+      local.set $4
       local.get $0
       local.tee $2
       i32.const 1
@@ -197,81 +155,127 @@
       local.get $3
       i32.load8_u
       i32.store8
+      br $while-continue|0
+     end
+    end
+    loop $while-continue|1
+     local.get $4
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
       local.get $4
-      i32.const 1
+      i32.const 8
       i32.sub
       local.set $4
-      br $while-continue|2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-   else
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eqz
+   end
+   loop $while-continue|2
+    local.get $4
     if
-     loop $while-continue|3
-      local.get $0
+     local.get $0
+     local.tee $2
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $2
+     local.get $3
+     i32.load8_u
+     i32.store8
+     local.get $4
+     i32.const 1
+     i32.sub
+     local.set $4
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eqz
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $4
+     i32.add
+     i32.const 7
+     i32.and
+     if
       local.get $4
-      i32.add
-      i32.const 7
-      i32.and
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       i32.add
-       local.get $4
-       i32.const 1040
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
+       return
       end
-     end
-     loop $while-continue|4
+      local.get $0
       local.get $4
-      i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       i32.add
-       local.get $4
-       i32.const 1040
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.const 1
+      i32.sub
+      local.tee $4
+      i32.add
+      local.get $4
+      i32.const 1040
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $while-continue|3
      end
     end
-    loop $while-continue|5
+    loop $while-continue|4
      local.get $4
+     i32.const 8
+     i32.ge_u
      if
       local.get $0
       local.get $4
-      i32.const 1
+      i32.const 8
       i32.sub
       local.tee $4
       i32.add
       local.get $4
       i32.const 1040
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $4
+    if
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.sub
+     local.tee $4
+     i32.add
+     local.get $4
+     i32.const 1040
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
@@ -316,7 +320,7 @@
   i32.lt_u
   select
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -343,112 +347,112 @@
    br_if $do-continue|0
   end
  )
- (func $~lib/number/U64#toString (param $0 i64) (result i32)
-  (local $1 i64)
+ (func $~lib/util/number/utoa64 (param $0 i64) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $__inlined_func$~lib/util/number/utoa64
+  local.get $0
+  i64.eqz
+  if
+   i32.const 1184
+   return
+  end
+  local.get $0
+  i64.const 4294967295
+  i64.le_u
+  if
    local.get $0
-   i64.eqz
-   if
-    i32.const 1184
-    local.set $3
-    br $__inlined_func$~lib/util/number/utoa64
-   end
+   i32.wrap_i64
+   local.tee $1
+   call $~lib/util/number/decimalCount32
+   local.tee $2
+   i32.const 1
+   i32.shl
+   i32.const 1
+   call $~lib/rt/stub/__alloc
+   local.tee $3
+   local.get $1
+   local.get $2
+   call $~lib/util/number/utoa32_core
+  else
    local.get $0
-   i64.const 4294967295
-   i64.le_u
-   if
+   i64.const 100000000000
+   i64.ge_u
+   i32.const 10
+   i32.add
+   local.get $0
+   i64.const 10000000000
+   i64.ge_u
+   i32.add
+   local.get $0
+   i64.const 100000000000000
+   i64.ge_u
+   i32.const 13
+   i32.add
+   local.get $0
+   i64.const 10000000000000
+   i64.ge_u
+   i32.add
+   local.get $0
+   i64.const 1000000000000
+   i64.lt_u
+   select
+   local.get $0
+   i64.const 10000000000000000
+   i64.ge_u
+   i32.const 16
+   i32.add
+   local.get $0
+   i64.const -8446744073709551616
+   i64.ge_u
+   i32.const 18
+   i32.add
+   local.get $0
+   i64.const 1000000000000000000
+   i64.ge_u
+   i32.add
+   local.get $0
+   i64.const 100000000000000000
+   i64.lt_u
+   select
+   local.get $0
+   i64.const 1000000000000000
+   i64.lt_u
+   select
+   local.tee $1
+   i32.const 1
+   i32.shl
+   i32.const 1
+   call $~lib/rt/stub/__alloc
+   local.tee $3
+   local.set $2
+   loop $do-continue|0
     local.get $0
+    i64.const 10
+    i64.rem_u
     i32.wrap_i64
-    local.tee $2
-    call $~lib/util/number/decimalCount32
-    local.tee $4
+    local.set $4
+    local.get $0
+    i64.const 10
+    i64.div_u
+    local.set $0
+    local.get $2
+    local.get $1
     i32.const 1
-    i32.shl
+    i32.sub
+    local.tee $1
     i32.const 1
-    call $~lib/rt/stub/__alloc
-    local.tee $3
-    local.get $2
-    local.get $4
-    call $~lib/util/number/utoa_simple<u32>
-   else
-    local.get $0
-    i64.const 100000000000
-    i64.ge_u
-    i32.const 10
-    i32.add
-    local.get $0
-    i64.const 10000000000
-    i64.ge_u
-    i32.add
-    local.get $0
-    i64.const 100000000000000
-    i64.ge_u
-    i32.const 13
-    i32.add
-    local.get $0
-    i64.const 10000000000000
-    i64.ge_u
-    i32.add
-    local.get $0
-    i64.const 1000000000000
-    i64.lt_u
-    select
-    local.get $0
-    i64.const 10000000000000000
-    i64.ge_u
-    i32.const 16
-    i32.add
-    local.get $0
-    i64.const -8446744073709551616
-    i64.ge_u
-    i32.const 18
+    i32.shl
     i32.add
-    local.get $0
-    i64.const 1000000000000000000
-    i64.ge_u
+    local.get $4
+    i32.const 48
     i32.add
+    i32.store16
     local.get $0
-    i64.const 100000000000000000
-    i64.lt_u
-    select
-    local.get $0
-    i64.const 1000000000000000
-    i64.lt_u
-    select
-    local.tee $2
-    i32.const 1
-    i32.shl
-    i32.const 1
-    call $~lib/rt/stub/__alloc
-    local.tee $3
-    local.set $4
-    loop $do-continue|0
-     local.get $0
-     i64.const 10
-     i64.div_u
-     local.get $4
-     local.get $2
-     i32.const 1
-     i32.sub
-     local.tee $2
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $0
-     i64.const 10
-     i64.rem_u
-     i32.wrap_i64
-     i32.const 48
-     i32.add
-     i32.store16
-     local.tee $0
-     i64.const 0
-     i64.ne
-     br_if $do-continue|0
-    end
+    i64.const 0
+    i64.ne
+    br_if $do-continue|0
    end
   end
   local.get $3
@@ -464,7 +468,7 @@
   i32.const 0
   call $~lib/rt/stub/__alloc
   local.tee $1
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $0
   local.get $1
   i32.store
@@ -492,9 +496,9 @@
   local.get $0
   i32.load offset=4
   i64.load
-  call $~lib/number/U64#toString
+  call $~lib/util/number/utoa64
  )
- (func $resolve-access/Container#constructor (result i32)
+ (func $resolve-access/fieldAccess (result i32)
   (local $0 i32)
   i32.const 8
   i32.const 5
@@ -503,47 +507,46 @@
   i64.const 0
   i64.store
   local.get $0
- )
- (func $resolve-access/fieldAccess (result i32)
-  (local $0 i32)
-  call $resolve-access/Container#constructor
-  local.tee $0
   i64.const 1
   i64.store
   local.get $0
   i64.load
-  call $~lib/number/U64#toString
+  call $~lib/util/number/utoa64
  )
  (func $resolve-access/propertyAccess (result i32)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
-  call $resolve-access/Container#constructor
+  i32.const 8
+  i32.const 5
+  call $~lib/rt/stub/__alloc
   local.tee $0
+  i64.const 0
+  i64.store
+  local.get $0
   i64.const 1
   i64.store
   local.get $0
   i64.load
   i32.wrap_i64
   local.tee $1
-  local.set $0
-  i32.const 1184
-  local.set $2
-  local.get $1
   if
-   local.get $0
+   local.get $1
    call $~lib/util/number/decimalCount32
-   local.tee $1
+   local.tee $2
    i32.const 1
    i32.shl
    i32.const 1
    call $~lib/rt/stub/__alloc
-   local.tee $2
-   local.get $0
+   local.tee $0
    local.get $1
-   call $~lib/util/number/utoa_simple<u32>
+   local.get $2
+   call $~lib/util/number/utoa32_core
+  else
+   i32.const 1184
+   local.set $0
   end
-  local.get $2
+  local.get $0
  )
  (func $~start
   i32.const 1200
diff --git a/tests/compiler/resolve-access.untouched.wat b/tests/compiler/resolve-access.untouched.wat
index 41c5ec2cad..be7b1a88d9 100644
--- a/tests/compiler/resolve-access.untouched.wat
+++ b/tests/compiler/resolve-access.untouched.wat
@@ -1,13 +1,13 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_none (func (param i32)))
+ (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
@@ -1162,238 +1162,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
@@ -1670,6 +1665,16 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32)
   local.get $0
   i64.const 1000000000000000
@@ -1852,14 +1857,20 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa64_lut
+ )
  (func $~lib/util/number/utoa64 (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i64)
   local.get $0
   i64.const 0
   i64.ne
@@ -1886,19 +1897,9 @@
    call $~lib/rt/stub/__alloc
    local.set $1
    local.get $1
-   local.set $6
    local.get $2
-   local.set $5
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
@@ -1910,19 +1911,9 @@
    call $~lib/rt/stub/__alloc
    local.set $1
    local.get $1
-   local.set $5
    local.get $0
-   local.set $7
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $5
-   local.get $7
-   local.get $4
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
   call $~lib/rt/stub/__retain
@@ -2007,9 +1998,6 @@
  (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   i32.eqz
   if
@@ -2026,19 +2014,9 @@
   call $~lib/rt/stub/__alloc
   local.set $2
   local.get $2
-  local.set $5
   local.get $0
-  local.set $4
   local.get $1
-  local.set $3
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $5
-  local.get $4
-  local.get $3
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $2
   call $~lib/rt/stub/__retain
  )
diff --git a/tests/compiler/resolve-binary.optimized.wat b/tests/compiler/resolve-binary.optimized.wat
index bbc14781d5..83dbd365f0 100644
--- a/tests/compiler/resolve-binary.optimized.wat
+++ b/tests/compiler/resolve-binary.optimized.wat
@@ -1,12 +1,14 @@
 (module
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $none_=>_i32 (func (result i32)))
- (type $i32_i64_i32_i64_i32_i64_=>_i32 (func (param i32 i64 i32 i64 i32 i64) (result i32)))
+ (type $i32_i64_i64_i32_i64_=>_i32 (func (param i32 i64 i64 i32 i64) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e")
@@ -43,6 +45,9 @@
  (data (i32.const 2880) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00p\00o\00w")
  (global $resolve-binary/a (mut i32) (i32.const 0))
  (global $~lib/rt/stub/offset (mut i32) (i32.const 0))
+ (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0))
+ (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0))
+ (global $~lib/util/number/_exp (mut i32) (i32.const 0))
  (global $~lib/util/number/_K (mut i32) (i32.const 0))
  (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0))
  (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0))
@@ -50,14 +55,6 @@
  (global $resolve-binary/bar2 (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -151,10 +148,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -292,7 +297,7 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -347,7 +352,7 @@
    local.tee $2
    local.get $0
    local.get $3
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
    local.get $1
    if
     local.get $2
@@ -359,42 +364,144 @@
    i32.const 1200
   end
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (result i32)
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
+  local.get $3
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (result i32)
+  (local $5 i32)
   (local $6 i32)
-  (local $7 i64)
+  (local $7 i32)
   (local $8 i32)
   (local $9 i64)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i64)
   (local $12 i64)
-  local.get $3
+  local.get $2
   local.get $1
   i64.sub
   local.set $9
-  local.get $3
+  local.get $2
   i64.const 1
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
-  local.tee $10
+  local.tee $8
   i64.extend_i32_s
   i64.shl
-  local.tee $11
+  local.tee $10
   i64.const 1
   i64.sub
-  local.tee $12
+  local.tee $11
   i64.and
-  local.set $7
-  local.get $3
-  local.get $10
+  local.set $1
+  local.get $2
+  local.get $8
   i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $6
+  local.tee $5
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $3
   loop $while-continue|0
-   local.get $4
+   local.get $3
    i32.const 0
    i32.gt_s
    if
@@ -409,281 +516,237 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
+               local.get $3
+               local.tee $6
                i32.const 10
                i32.ne
                if
-                local.get $4
+                local.get $6
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $6
+               local.get $5
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $6
+               local.set $3
+               local.get $5
                i32.const 1000000000
                i32.rem_u
-               local.set $6
+               local.set $5
                br $break|1
               end
-              local.get $6
+              local.get $5
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $6
+              local.set $3
+              local.get $5
               i32.const 100000000
               i32.rem_u
-              local.set $6
+              local.set $5
               br $break|1
              end
-             local.get $6
+             local.get $5
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $6
+             local.set $3
+             local.get $5
              i32.const 10000000
              i32.rem_u
-             local.set $6
+             local.set $5
              br $break|1
             end
-            local.get $6
+            local.get $5
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $6
+            local.set $3
+            local.get $5
             i32.const 1000000
             i32.rem_u
-            local.set $6
+            local.set $5
             br $break|1
            end
-           local.get $6
+           local.get $5
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $6
+           local.set $3
+           local.get $5
            i32.const 100000
            i32.rem_u
-           local.set $6
+           local.set $5
            br $break|1
           end
-          local.get $6
+          local.get $5
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $6
+          local.set $3
+          local.get $5
           i32.const 10000
           i32.rem_u
-          local.set $6
+          local.set $5
           br $break|1
          end
-         local.get $6
+         local.get $5
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $6
+         local.set $3
+         local.get $5
          i32.const 1000
          i32.rem_u
-         local.set $6
+         local.set $5
          br $break|1
         end
-        local.get $6
+        local.get $5
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $6
+        local.set $3
+        local.get $5
         i32.const 100
         i32.rem_u
-        local.set $6
+        local.set $5
         br $break|1
        end
-       local.get $6
+       local.get $5
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $6
+       local.set $3
+       local.get $5
        i32.const 10
        i32.rem_u
-       local.set $6
+       local.set $5
        br $break|1
       end
-      local.get $6
-      local.set $2
+      local.get $5
+      local.set $3
       i32.const 0
-      local.set $6
+      local.set $5
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $8
+    local.get $3
+    local.get $7
     i32.or
     if
      local.get $0
-     local.get $8
+     local.get $7
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $8
+     local.get $7
      i32.const 1
      i32.add
-     local.set $8
+     local.set $7
     end
-    local.get $4
+    local.get $6
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $7
-    local.get $6
+    local.set $3
+    local.get $1
+    local.get $5
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $3
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $7
      local.get $4
+     local.get $2
+     local.get $3
      i32.const 2
      i32.shl
      i32.const 2296
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $8
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $0
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.tee $7
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $7
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $0
-     local.get $4
-     i32.store16
-     local.get $8
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $7
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $1
-  loop $while-continue|4
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $7
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $1
+   local.tee $1
+   local.get $2
    i64.shr_u
-   local.tee $7
-   local.get $8
+   local.tee $12
+   local.get $7
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $8
+    local.get $7
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
     i32.store16
-    local.get $8
+    local.get $7
     i32.const 1
     i32.add
-    local.set $8
+    local.set $7
    end
-   local.get $4
+   local.get $3
    i32.const 1
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $12
+   local.set $3
+   local.get $1
+   local.get $11
    i64.and
-   local.tee $7
-   local.get $5
+   local.tee $1
+   local.get $4
    i64.ge_u
-   br_if $while-continue|4
+   br_if $while-continue|2
   end
-  local.get $4
+  local.get $3
   global.get $~lib/util/number/_K
   i32.add
   global.set $~lib/util/number/_K
+  local.get $0
   local.get $7
-  local.set $1
+  local.get $4
+  local.get $1
+  local.get $10
   local.get $9
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
   i32.const 2
   i32.shl
@@ -691,235 +754,212 @@
   i32.add
   i64.load32_u
   i64.mul
-  local.set $3
+  call $~lib/util/number/grisuRound
+  local.get $7
+ )
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
   local.get $0
-  local.get $8
-  i32.const 1
-  i32.sub
-  i32.const 1
-  i32.shl
-  i32.add
-  local.tee $0
-  i32.load16_u
-  local.set $4
-  loop $while-continue|6
-   i32.const 1
-   local.get $3
-   local.get $1
-   i64.sub
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   local.get $11
-   i64.add
-   local.tee $7
-   local.get $3
-   i64.sub
-   i64.gt_u
-   local.get $7
-   local.get $3
-   i64.lt_u
-   select
-   i32.const 0
-   local.get $5
-   local.get $1
-   i64.sub
-   local.get $11
-   i64.ge_u
-   i32.const 0
-   local.get $1
-   local.get $3
-   i64.lt_u
-   select
-   select
-   if
-    local.get $4
-    i32.const 1
-    i32.sub
-    local.set $4
-    local.get $1
-    local.get $11
-    i64.add
-    local.set $1
-    br $while-continue|6
-   end
-  end
-  local.get $0
-  local.get $4
-  i32.store16
-  local.get $8
- )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
+   i32.const 7
+   i32.and
    i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.get $1
-   i32.lt_u
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $1
+ )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
@@ -1004,7 +1044,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $0
     i32.const 46
     i32.store16
@@ -1033,7 +1073,7 @@
      local.get $1
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $0
      i32.const 3014704
      i32.store
@@ -1070,36 +1110,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $1
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       i32.const 2
       i32.add
      else
@@ -1115,7 +1131,7 @@
       local.tee $2
       i32.const 2
       i32.sub
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $0
       i32.const 46
       i32.store16 offset=2
@@ -1126,36 +1142,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $2
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       local.get $1
       i32.add
       i32.const 2
@@ -1165,169 +1157,52 @@
    end
   end
  )
- (func $~lib/util/number/dtoa_core (param $0 i32) (result i32)
-  (local $1 i64)
-  (local $2 i64)
-  (local $3 i64)
-  i32.const -4
-  global.set $~lib/util/number/_K
-  i32.const 1776
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 2208
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $0
-  local.get $0
-  global.get $~lib/util/number/_frc_pow
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $3
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  i64.const 2147483648
-  i64.mul
-  i64.const 0
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.const 0
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $0
-  i32.const 3
-  i32.add
-  local.get $3
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 1024
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $3
-  i64.const 1024
-  i64.mul
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $1
-  local.get $0
-  i32.const 3
-  i32.add
-  local.get $1
-  local.get $3
-  i64.const 2147483647
-  i64.mul
-  local.get $2
-  i64.const 2147483647
-  i64.mul
-  local.get $2
-  i64.const 4294966784
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $3
-  i64.const 4294966784
-  i64.mul
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  call $~lib/util/number/genDigits
-  global.get $~lib/util/number/_K
-  call $~lib/util/number/prettify
- )
  (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   i32.const 0
   local.get $0
-  call $~lib/string/String#get:length
-  local.tee $4
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $2
+  i32.const 0
+  local.get $2
   i32.lt_s
-  local.set $2
+  select
+  local.tee $3
   local.get $1
   i32.const 0
   local.get $1
   i32.const 0
   i32.gt_s
   select
-  local.tee $3
-  local.get $4
-  i32.lt_s
-  local.set $1
-  i32.const 0
-  local.get $4
+  local.tee $1
   local.get $2
-  select
-  local.tee $2
-  local.get $3
-  local.get $4
   local.get $1
-  select
-  local.tee $3
   local.get $2
+  i32.lt_s
+  select
+  local.tee $1
   local.get $3
+  local.get $1
   i32.gt_s
   select
   i32.const 1
   i32.shl
-  local.tee $1
-  local.get $2
+  local.tee $4
   local.get $3
-  local.get $2
+  local.get $1
   local.get $3
+  local.get $1
   i32.lt_s
   select
   i32.const 1
   i32.shl
-  local.tee $2
+  local.tee $1
   i32.sub
   local.tee $3
   i32.eqz
@@ -1336,12 +1211,12 @@
    return
   end
   i32.const 0
-  local.get $1
   local.get $4
+  local.get $2
   i32.const 1
   i32.shl
   i32.eq
-  local.get $2
+  local.get $1
   select
   if
    local.get $0
@@ -1350,73 +1225,119 @@
   local.get $3
   i32.const 1
   call $~lib/rt/stub/__alloc
-  local.tee $1
+  local.tee $2
   local.get $0
-  local.get $2
+  local.get $1
   i32.add
   local.get $3
-  call $~lib/memory/memory.copy
-  local.get $1
+  call $~lib/util/memory/memmove
+  local.get $2
  )
- (func $~lib/number/F64#toString (result i32)
+ (func $~lib/util/number/dtoa (result i32)
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
   i32.const 56
   i32.const 1
   call $~lib/rt/stub/__alloc
-  local.tee $0
-  call $~lib/util/number/dtoa_core
+  local.set $0
+  i64.const -9223372036854774784
+  global.set $~lib/util/number/_frc_plus
+  i64.const 9223372036854775296
+  global.set $~lib/util/number/_frc_minus
+  i32.const -61
+  global.set $~lib/util/number/_exp
+  i32.const -4
+  global.set $~lib/util/number/_K
+  i32.const 1776
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 2208
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $1
+  local.get $0
+  local.get $0
+  i64.const -9223372036854775808
+  global.get $~lib/util/number/_frc_pow
+  local.tee $3
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $3
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $4
+  local.get $1
+  global.get $~lib/util/number/_exp
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $4
+  global.get $~lib/util/number/_frc_minus
+  local.get $3
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  call $~lib/util/number/genDigits
+  global.get $~lib/util/number/_K
+  call $~lib/util/number/prettify
   local.tee $1
+  local.set $2
+  local.get $1
   i32.const 28
-  i32.ne
-  if (result i32)
-   local.get $0
-   local.get $1
-   call $~lib/string/String#substring
+  i32.eq
+  if
    local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
+   return
+  end
+  local.get $0
+  local.get $2
+  call $~lib/string/String#substring
+  local.get $0
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $0
+  select
+  i32.eqz
+  if
    i32.const 0
-   local.get $0
-   select
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 2368
-    i32.const 70
-    i32.const 3
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   i32.const 16
-   i32.sub
-   local.tee $2
-   i32.load offset=4
-   i32.const 1
-   i32.ne
-   if
-    i32.const 0
-    i32.const 2368
-    i32.const 72
-    i32.const 14
-    call $~lib/builtins/abort
-    unreachable
-   end
-   global.get $~lib/rt/stub/offset
-   local.get $0
-   local.get $2
-   i32.load
-   i32.add
-   i32.eq
-   if
-    local.get $2
-    global.set $~lib/rt/stub/offset
-   end
-  else
-   local.get $0
+   i32.const 2368
+   i32.const 70
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 16
+  i32.sub
+  local.tee $1
+  i32.load offset=4
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 2368
+   i32.const 72
+   i32.const 14
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/stub/offset
+  local.get $0
+  local.get $1
+  i32.load
+  i32.add
+  i32.eq
+  if
+   local.get $1
+   global.set $~lib/rt/stub/offset
   end
  )
  (func $start:resolve-binary
@@ -1584,7 +1505,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $~lib/number/F64#toString
+  call $~lib/util/number/dtoa
   i32.const 2416
   call $~lib/string/String.__eq
   i32.eqz
@@ -1797,7 +1718,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $~lib/number/F64#toString
+  call $~lib/util/number/dtoa
   i32.const 2416
   call $~lib/string/String.__eq
   i32.eqz
diff --git a/tests/compiler/resolve-binary.untouched.wat b/tests/compiler/resolve-binary.untouched.wat
index 9e716591e0..2704f5af56 100644
--- a/tests/compiler/resolve-binary.untouched.wat
+++ b/tests/compiler/resolve-binary.untouched.wat
@@ -1,17 +1,27 @@
 (module
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_=>_f64 (func (param i32) (result f64)))
+ (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
  (type $f64_i32_=>_i32 (func (param f64 i32) (result i32)))
- (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
+ (type $i32_f64_=>_f64 (func (param i32 f64) (result f64)))
+ (type $i64_=>_f64 (func (param i64) (result f64)))
+ (type $f64_i64_i64_=>_f64 (func (param f64 i64 i64) (result f64)))
+ (type $f64_f64_i32_=>_f64 (func (param f64 f64 i32) (result f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 16) "\08\00\00\00\01\00\00\00\01\00\00\00\08\00\00\00t\00r\00u\00e\00")
@@ -593,13 +603,20 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -629,19 +646,9 @@
   call $~lib/rt/stub/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
@@ -669,20 +676,86 @@
   local.get $0
   call $~lib/util/number/itoa<i32>
  )
- (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
-  (local $2 f64)
-  (local $3 f64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i64)
-  (local $7 i64)
-  (local $8 i64)
-  (local $9 i64)
+ (func $~lib/util/math/zeroinfnan (param $0 i64) (result i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.sub
+  i64.const -9007199254740992
+  i64.const 1
+  i64.sub
+  i64.ge_u
+ )
+ (func $~lib/util/math/checkint (param $0 i64) (result i32)
+  (local $1 i64)
+  local.get $0
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  local.set $1
+  local.get $1
+  i64.const 1023
+  i64.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  i64.gt_u
+  if
+   i32.const 2
+   return
+  end
+  i64.const 1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  local.get $1
+  i64.sub
+  i64.shl
+  local.set $1
+  local.get $0
+  local.get $1
+  i64.const 1
+  i64.sub
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  local.get $1
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 1
+   return
+  end
+  i32.const 2
+ )
+ (func $~lib/util/math/log_inline (param $0 i64) (result f64)
+  (local $1 i64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  (local $9 f64)
   (local $10 f64)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
   (local $15 f64)
   (local $16 f64)
   (local $17 f64)
@@ -698,956 +771,1086 @@
   (local $27 f64)
   (local $28 f64)
   (local $29 f64)
-  (local $30 f64)
-  (local $31 f64)
-  (local $32 f64)
-  (local $33 f64)
-  (local $34 f64)
-  (local $35 f64)
-  (local $36 f64)
-  (local $37 f64)
-  (local $38 f64)
-  (local $39 i32)
-  (local $40 i32)
-  (local $41 i32)
-  (local $42 i32)
-  (local $43 i64)
-  (local $44 i64)
+  local.get $0
+  i64.const 4604531861337669632
+  i64.sub
+  local.set $1
   local.get $1
-  f64.abs
-  f64.const 2
-  f64.le
-  if
-   local.get $1
-   f64.const 2
-   f64.eq
-   if
-    local.get $0
-    local.get $0
-    f64.mul
-    return
-   end
-   local.get $1
-   f64.const 0.5
-   f64.eq
-   if
-    local.get $0
-    f64.sqrt
-    f64.abs
-    f64.const inf
-    local.get $0
-    f64.const inf
-    f64.neg
-    f64.ne
-    select
-    return
-   end
-   local.get $1
-   f64.const -1
-   f64.eq
-   if
-    f64.const 1
-    local.get $0
-    f64.div
-    return
-   end
-   local.get $1
-   f64.const 1
-   f64.eq
-   if
-    local.get $0
-    return
-   end
-   local.get $1
-   f64.const 0
-   f64.eq
-   if
-    f64.const 1
-    return
-   end
-  end
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/pow_lut|inlined.0 (result f64)
-   local.get $0
-   local.set $3
-   local.get $1
-   local.set $2
-   i32.const 0
-   local.set $4
-   local.get $3
-   i64.reinterpret_f64
-   local.set $5
-   local.get $2
-   i64.reinterpret_f64
-   local.set $6
-   local.get $5
-   i64.const 52
-   i64.shr_u
-   local.set $7
-   local.get $6
-   i64.const 52
-   i64.shr_u
-   local.set $8
-   local.get $7
-   i64.const 1
-   i64.sub
-   i64.const 2047
-   i64.const 1
-   i64.sub
-   i64.ge_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
-   end
-   if
-    local.get $6
-    local.set $9
-    local.get $9
-    i64.const 1
-    i64.shl
-    i64.const 1
-    i64.sub
-    i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
-    if
-     local.get $6
-     i64.const 1
-     i64.shl
-     i64.const 0
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const -9007199254740992
-     i64.gt_u
-     if (result i32)
-      i32.const 1
-     else
-      local.get $6
-      i64.const 1
-      i64.shl
-      i64.const -9007199254740992
-      i64.gt_u
-     end
-     if
-      local.get $3
-      local.get $2
-      f64.add
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.lt_u
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     i32.eqz
-     i32.eq
-     if
-      f64.const 0
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $2
-     local.get $2
-     f64.mul
-     br $~lib/util/math/pow_lut|inlined.0
-    end
-    local.get $5
-    local.set $9
-    local.get $9
-    i64.const 1
-    i64.shl
-    i64.const 1
-    i64.sub
-    i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
-    if
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $10
-     local.get $5
-     i64.const 63
-     i64.shr_u
-     i32.wrap_i64
-     if (result i32)
-      block $~lib/util/math/checkint|inlined.0 (result i32)
-       local.get $6
-       local.set $9
-       local.get $9
-       i64.const 52
-       i64.shr_u
-       i64.const 2047
-       i64.and
-       local.set $11
-       local.get $11
-       i64.const 1023
-       i64.lt_u
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $11
-       i64.const 1023
-       i64.const 52
-       i64.add
-       i64.gt_u
-       if
-        i32.const 2
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i64.const 1
-       i64.const 1023
-       i64.const 52
-       i64.add
-       local.get $11
-       i64.sub
-       i64.shl
-       local.set $11
-       local.get $9
-       local.get $11
-       i64.const 1
-       i64.sub
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $9
-       local.get $11
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 1
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i32.const 2
-      end
-      i32.const 1
-      i32.eq
-     else
-      i32.const 0
-     end
-     if
-      local.get $10
-      f64.neg
-      local.set $10
-     end
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     if (result f64)
-      f64.const 1
-      local.get $10
-      f64.div
-     else
-      local.get $10
-     end
-     br $~lib/util/math/pow_lut|inlined.0
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shr_u
+  i64.const 127
+  i64.and
+  i32.wrap_i64
+  local.set $2
+  local.get $1
+  i64.const 52
+  i64.shr_s
+  local.set $3
+  local.get $0
+  local.get $1
+  i64.const 4095
+  i64.const 52
+  i64.shl
+  i64.and
+  i64.sub
+  local.set $4
+  local.get $4
+  f64.reinterpret_i64
+  local.set $5
+  local.get $3
+  f64.convert_i64_s
+  local.set $6
+  i32.const 664
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $7
+  i32.const 664
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=16
+  local.set $8
+  i32.const 664
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=24
+  local.set $9
+  local.get $4
+  i64.const 2147483648
+  i64.add
+  i64.const -4294967296
+  i64.and
+  f64.reinterpret_i64
+  local.set $10
+  local.get $5
+  local.get $10
+  f64.sub
+  local.set $11
+  local.get $10
+  local.get $7
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $12
+  local.get $11
+  local.get $7
+  f64.mul
+  local.set $13
+  local.get $12
+  local.get $13
+  f64.add
+  local.set $14
+  local.get $6
+  f64.const 0.6931471805598903
+  f64.mul
+  local.get $8
+  f64.add
+  local.set $15
+  local.get $15
+  local.get $14
+  f64.add
+  local.set $16
+  local.get $6
+  f64.const 5.497923018708371e-14
+  f64.mul
+  local.get $9
+  f64.add
+  local.set $17
+  local.get $15
+  local.get $16
+  f64.sub
+  local.get $14
+  f64.add
+  local.set $18
+  f64.const -0.5
+  local.get $14
+  f64.mul
+  local.set $19
+  local.get $14
+  local.get $19
+  f64.mul
+  local.set $20
+  local.get $14
+  local.get $20
+  f64.mul
+  local.set $21
+  f64.const -0.5
+  local.get $12
+  f64.mul
+  local.set $22
+  local.get $12
+  local.get $22
+  f64.mul
+  local.set $23
+  local.get $16
+  local.get $23
+  f64.add
+  local.set $24
+  local.get $13
+  local.get $19
+  local.get $22
+  f64.add
+  f64.mul
+  local.set $25
+  local.get $16
+  local.get $24
+  f64.sub
+  local.get $23
+  f64.add
+  local.set $26
+  local.get $21
+  f64.const -0.6666666666666679
+  local.get $14
+  f64.const 0.5000000000000007
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const 0.7999999995323976
+  local.get $14
+  f64.const -0.6666666663487739
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const -1.142909628459501
+  local.get $14
+  f64.const 1.0000415263675542
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  local.set $27
+  local.get $17
+  local.get $18
+  f64.add
+  local.get $25
+  f64.add
+  local.get $26
+  f64.add
+  local.get $27
+  f64.add
+  local.set $28
+  local.get $24
+  local.get $28
+  f64.add
+  local.set $29
+  local.get $24
+  local.get $29
+  f64.sub
+  local.get $28
+  f64.add
+  global.set $~lib/util/math/log_tail
+  local.get $29
+ )
+ (func $~lib/util/math/xflow (param $0 i32) (param $1 f64) (result f64)
+  local.get $1
+  f64.neg
+  local.get $1
+  local.get $0
+  select
+  local.get $1
+  f64.mul
+ )
+ (func $~lib/util/math/uflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 1152921504606846976
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/oflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 8070450532247928832
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/specialcase (param $0 f64) (param $1 i64) (param $2 i64) (result f64)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  local.get $2
+  i64.const 2147483648
+  i64.and
+  i64.const 0
+  i64.ne
+  i32.eqz
+  if
+   local.get $1
+   i64.const 1009
+   i64.const 52
+   i64.shl
+   i64.sub
+   local.set $1
+   local.get $1
+   f64.reinterpret_i64
+   local.set $3
+   f64.const 5486124068793688683255936e279
+   local.get $3
+   local.get $3
+   local.get $0
+   f64.mul
+   f64.add
+   f64.mul
+   return
+  end
+  local.get $1
+  i64.const 1022
+  i64.const 52
+  i64.shl
+  i64.add
+  local.set $1
+  local.get $1
+  f64.reinterpret_i64
+  local.set $3
+  local.get $3
+  local.get $3
+  local.get $0
+  f64.mul
+  f64.add
+  local.set $4
+  local.get $4
+  f64.abs
+  f64.const 1
+  f64.lt
+  if
+   f64.const 1
+   local.get $4
+   f64.copysign
+   local.set $5
+   local.get $3
+   local.get $4
+   f64.sub
+   local.get $3
+   local.get $0
+   f64.mul
+   f64.add
+   local.set $6
+   local.get $5
+   local.get $4
+   f64.add
+   local.set $7
+   local.get $5
+   local.get $7
+   f64.sub
+   local.get $4
+   f64.add
+   local.get $6
+   f64.add
+   local.set $6
+   local.get $7
+   local.get $6
+   f64.add
+   local.get $5
+   f64.sub
+   local.set $4
+   local.get $4
+   f64.const 0
+   f64.eq
+   if
+    local.get $1
+    i64.const -9223372036854775808
+    i64.and
+    f64.reinterpret_i64
+    local.set $4
+   end
+  end
+  local.get $4
+  f64.const 2.2250738585072014e-308
+  f64.mul
+ )
+ (func $~lib/util/math/exp_inline (param $0 f64) (param $1 f64) (param $2 i32) (result f64)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 f64)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $15
+  local.get $15
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  i32.const 2047
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 969
+  i32.sub
+  i32.const 63
+  i32.ge_u
+  if
+   local.get $3
+   i32.const 969
+   i32.sub
+   i32.const -2147483648
+   i32.ge_u
+   if
+    f64.const -1
+    f64.const 1
+    local.get $2
+    select
+    return
+   end
+   local.get $3
+   i32.const 1033
+   i32.ge_u
+   if
+    local.get $15
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    if (result f64)
+     local.get $2
+     call $~lib/util/math/uflow
+    else
+     local.get $2
+     call $~lib/util/math/oflow
+    end
+    return
+   end
+   i32.const 0
+   local.set $3
+  end
+  f64.const 184.6649652337873
+  local.get $0
+  f64.mul
+  local.set $9
+  local.get $9
+  f64.const 6755399441055744
+  f64.add
+  local.set $8
+  local.get $8
+  i64.reinterpret_f64
+  local.set $4
+  local.get $8
+  f64.const 6755399441055744
+  f64.sub
+  local.set $8
+  local.get $0
+  local.get $8
+  f64.const -0.005415212348111709
+  f64.mul
+  f64.add
+  local.get $8
+  f64.const -1.2864023111638346e-14
+  f64.mul
+  f64.add
+  local.set $10
+  local.get $10
+  local.get $1
+  f64.add
+  local.set $10
+  local.get $4
+  i64.const 127
+  i64.and
+  i64.const 1
+  i64.shl
+  i32.wrap_i64
+  local.set $7
+  local.get $4
+  local.get $2
+  i64.extend_i32_u
+  i64.add
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shl
+  local.set $5
+  i32.const 4760
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  f64.reinterpret_i64
+  local.set $13
+  i32.const 4760
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load offset=8
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $10
+  local.get $10
+  f64.mul
+  local.set $11
+  local.get $13
+  local.get $10
+  f64.add
+  local.get $11
+  f64.const 0.49999999999996786
+  local.get $10
+  f64.const 0.16666666666665886
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $11
+  local.get $11
+  f64.mul
+  f64.const 0.0416666808410674
+  local.get $10
+  f64.const 0.008333335853059549
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $14
+  local.get $3
+  i32.const 0
+  i32.eq
+  if
+   local.get $14
+   local.get $6
+   local.get $4
+   call $~lib/util/math/specialcase
+   return
+  end
+  local.get $6
+  f64.reinterpret_i64
+  local.set $12
+  local.get $12
+  local.get $12
+  local.get $14
+  f64.mul
+  f64.add
+ )
+ (func $~lib/util/math/pow_lut (param $0 f64) (param $1 f64) (result f64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 f64)
+  (local $8 i32)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 f64)
+  (local $16 f64)
+  i32.const 0
+  local.set $2
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $1
+  i64.reinterpret_f64
+  local.set $4
+  local.get $3
+  i64.const 52
+  i64.shr_u
+  local.set $5
+  local.get $4
+  i64.const 52
+  i64.shr_u
+  local.set $6
+  local.get $5
+  i64.const 1
+  i64.sub
+  i64.const 2047
+  i64.const 1
+  i64.sub
+  i64.ge_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $6
+   i64.const 2047
+   i64.and
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
+   i64.sub
+   i64.ge_u
+  end
+  if
+   local.get $4
+   call $~lib/util/math/zeroinfnan
+   if
+    local.get $4
+    i64.const 1
+    i64.shl
+    i64.const 0
+    i64.eq
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
+    if
+     f64.const nan:0x8000000000000
+     return
     end
-    local.get $5
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const -9007199254740992
+    i64.gt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $4
+     i64.const 1
+     i64.shl
+     i64.const -9007199254740992
+     i64.gt_u
+    end
+    if
+     local.get $0
+     local.get $1
+     f64.add
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const 9214364837600034816
+    i64.eq
+    if
+     f64.const nan:0x8000000000000
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const 9214364837600034816
+    i64.lt_u
+    local.get $4
     i64.const 63
     i64.shr_u
     i64.const 0
     i64.ne
+    i32.eqz
+    i32.eq
     if
-     block $~lib/util/math/checkint|inlined.1 (result i32)
-      local.get $6
-      local.set $9
-      local.get $9
-      i64.const 52
-      i64.shr_u
-      i64.const 2047
-      i64.and
-      local.set $11
-      local.get $11
-      i64.const 1023
-      i64.lt_u
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $11
-      i64.const 1023
-      i64.const 52
-      i64.add
-      i64.gt_u
-      if
-       i32.const 2
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i64.const 1
-      i64.const 1023
-      i64.const 52
-      i64.add
-      local.get $11
-      i64.sub
-      i64.shl
-      local.set $11
-      local.get $9
-      local.get $11
-      i64.const 1
-      i64.sub
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $9
-      local.get $11
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 1
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i32.const 2
-     end
-     local.set $12
-     local.get $12
-     i32.const 0
-     i32.eq
-     if
-      local.get $3
-      local.get $3
-      f64.sub
-      local.get $3
-      local.get $3
-      f64.sub
-      f64.div
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $12
+     f64.const 0
+     return
+    end
+    local.get $1
+    local.get $1
+    f64.mul
+    return
+   end
+   local.get $3
+   call $~lib/util/math/zeroinfnan
+   if
+    local.get $0
+    local.get $0
+    f64.mul
+    local.set $7
+    local.get $3
+    i64.const 63
+    i64.shr_u
+    i32.wrap_i64
+    if (result i32)
+     local.get $4
+     call $~lib/util/math/checkint
      i32.const 1
      i32.eq
-     if
-      i32.const 262144
-      local.set $4
-     end
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
+    else
+     i32.const 0
+    end
+    if
      local.get $7
-     i64.const 2047
-     i64.and
+     f64.neg
      local.set $7
     end
+    local.get $4
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    if (result f64)
+     f64.const 1
+     local.get $7
+     f64.div
+    else
+     local.get $7
+    end
+    return
+   end
+   local.get $3
+   i64.const 63
+   i64.shr_u
+   i64.const 0
+   i64.ne
+   if
+    local.get $4
+    call $~lib/util/math/checkint
+    local.set $8
     local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
+    i32.const 0
+    i32.eq
     if
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $8
-     i64.const 2047
-     i64.and
-     i64.const 958
-     i64.lt_u
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.gt_u
-     local.get $8
-     i64.const 2048
-     i64.lt_u
-     i32.eq
-     if (result f64)
-      f64.const inf
-     else
-      f64.const 0
-     end
-     br $~lib/util/math/pow_lut|inlined.0
+     local.get $0
+     local.get $0
+     f64.sub
+     local.get $0
+     local.get $0
+     f64.sub
+     f64.div
+     return
     end
-    local.get $7
-    i64.const 0
-    i64.eq
+    local.get $8
+    i32.const 1
+    i32.eq
     if
-     local.get $3
-     f64.const 4503599627370496
-     f64.mul
-     i64.reinterpret_f64
-     local.set $5
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
-     local.get $5
-     i64.const 52
-     i64.const 52
-     i64.shl
-     i64.sub
-     local.set $5
+     i32.const 262144
+     local.set $2
     end
+    local.get $3
+    i64.const 9223372036854775807
+    i64.and
+    local.set $3
+    local.get $5
+    i64.const 2047
+    i64.and
+    local.set $5
    end
-   local.get $5
-   local.set $9
-   local.get $9
-   i64.const 4604531861337669632
-   i64.sub
-   local.set $11
-   local.get $11
-   i64.const 52
-   i64.const 7
-   i64.sub
-   i64.shr_u
-   i64.const 127
-   i64.and
-   i32.wrap_i64
-   local.set $12
-   local.get $11
-   i64.const 52
-   i64.shr_s
-   local.set $13
-   local.get $9
-   local.get $11
-   i64.const 4095
-   i64.const 52
-   i64.shl
-   i64.and
-   i64.sub
-   local.set $14
-   local.get $14
-   f64.reinterpret_i64
-   local.set $10
-   local.get $13
-   f64.convert_i64_s
-   local.set $15
-   i32.const 664
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $16
-   i32.const 664
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=16
-   local.set $17
-   i32.const 664
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=24
-   local.set $18
-   local.get $14
-   i64.const 2147483648
-   i64.add
-   i64.const -4294967296
-   i64.and
-   f64.reinterpret_i64
-   local.set $19
-   local.get $10
-   local.get $19
-   f64.sub
-   local.set $20
-   local.get $19
-   local.get $16
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $21
-   local.get $20
-   local.get $16
-   f64.mul
-   local.set $22
-   local.get $21
-   local.get $22
-   f64.add
-   local.set $23
-   local.get $15
-   f64.const 0.6931471805598903
-   f64.mul
-   local.get $17
-   f64.add
-   local.set $24
-   local.get $24
-   local.get $23
-   f64.add
-   local.set $25
-   local.get $15
-   f64.const 5.497923018708371e-14
-   f64.mul
-   local.get $18
-   f64.add
-   local.set $26
-   local.get $24
-   local.get $25
-   f64.sub
-   local.get $23
-   f64.add
-   local.set $27
-   f64.const -0.5
-   local.get $23
-   f64.mul
-   local.set $28
-   local.get $23
-   local.get $28
-   f64.mul
-   local.set $29
-   local.get $23
-   local.get $29
-   f64.mul
-   local.set $30
-   f64.const -0.5
-   local.get $21
-   f64.mul
-   local.set $31
-   local.get $21
-   local.get $31
-   f64.mul
-   local.set $32
-   local.get $25
-   local.get $32
-   f64.add
-   local.set $33
-   local.get $22
-   local.get $28
-   local.get $31
-   f64.add
-   f64.mul
-   local.set $34
-   local.get $25
-   local.get $33
-   f64.sub
-   local.get $32
-   f64.add
-   local.set $35
-   local.get $30
-   f64.const -0.6666666666666679
-   local.get $23
-   f64.const 0.5000000000000007
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const 0.7999999995323976
-   local.get $23
-   f64.const -0.6666666663487739
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const -1.142909628459501
-   local.get $23
-   f64.const 1.0000415263675542
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.set $36
-   local.get $26
-   local.get $27
-   f64.add
-   local.get $34
-   f64.add
-   local.get $35
-   f64.add
-   local.get $36
-   f64.add
-   local.set $37
-   local.get $33
-   local.get $37
-   f64.add
-   local.set $38
-   local.get $33
-   local.get $38
-   f64.sub
-   local.get $37
-   f64.add
-   global.set $~lib/util/math/log_tail
-   local.get $38
-   local.set $38
-   global.get $~lib/util/math/log_tail
-   local.set $37
    local.get $6
-   i64.const -134217728
-   i64.and
-   f64.reinterpret_i64
-   local.set $34
-   local.get $2
-   local.get $34
-   f64.sub
-   local.set $33
-   local.get $38
-   i64.reinterpret_f64
-   i64.const -134217728
+   i64.const 2047
    i64.and
-   f64.reinterpret_i64
-   local.set $32
-   local.get $38
-   local.get $32
-   f64.sub
-   local.get $37
-   f64.add
-   local.set $31
-   local.get $34
-   local.get $32
-   f64.mul
-   local.set $36
-   local.get $33
-   local.get $32
-   f64.mul
-   local.get $2
-   local.get $31
-   f64.mul
-   f64.add
-   local.set $35
-   block $~lib/util/math/exp_inline|inlined.0 (result f64)
-    local.get $36
-    local.set $15
-    local.get $35
-    local.set $10
-    local.get $4
-    local.set $12
-    local.get $15
-    i64.reinterpret_f64
-    local.set $9
-    local.get $9
-    i64.const 52
-    i64.shr_u
-    i32.wrap_i64
-    i32.const 2047
-    i32.and
-    local.set $39
-    local.get $39
-    i32.const 969
-    i32.sub
-    i32.const 63
-    i32.ge_u
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
+   i64.sub
+   i64.ge_u
+   if
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
     if
-     local.get $39
-     i32.const 969
-     i32.sub
-     i32.const -2147483648
-     i32.ge_u
-     if
-      f64.const -1
-      f64.const 1
-      local.get $12
-      select
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     local.get $39
-     i32.const 1033
-     i32.ge_u
-     if
-      local.get $9
-      i64.const 63
-      i64.shr_u
-      i64.const 0
-      i64.ne
-      if (result f64)
-       local.get $12
-       local.set $41
-       local.get $41
-       local.set $42
-       i64.const 1152921504606846976
-       f64.reinterpret_i64
-       local.set $16
-       local.get $16
-       f64.neg
-       local.get $16
-       local.get $42
-       select
-       local.get $16
-       f64.mul
-      else
-       local.get $12
-       local.set $42
-       local.get $42
-       local.set $41
-       i64.const 8070450532247928832
-       f64.reinterpret_i64
-       local.set $17
-       local.get $17
-       f64.neg
-       local.get $17
-       local.get $41
-       select
-       local.get $17
-       f64.mul
-      end
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     i32.const 0
-     local.set $39
+     f64.const 1
+     return
     end
-    f64.const 184.6649652337873
-    local.get $15
+    local.get $6
+    i64.const 2047
+    i64.and
+    i64.const 958
+    i64.lt_u
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.gt_u
+    local.get $6
+    i64.const 2048
+    i64.lt_u
+    i32.eq
+    if (result f64)
+     f64.const inf
+    else
+     f64.const 0
+    end
+    return
+   end
+   local.get $5
+   i64.const 0
+   i64.eq
+   if
+    local.get $0
+    f64.const 4503599627370496
     f64.mul
-    local.set $29
-    local.get $29
-    f64.const 6755399441055744
-    f64.add
-    local.set $30
-    local.get $30
     i64.reinterpret_f64
-    local.set $14
-    local.get $30
-    f64.const 6755399441055744
-    f64.sub
-    local.set $30
-    local.get $15
-    local.get $30
-    f64.const -0.005415212348111709
-    f64.mul
-    f64.add
-    local.get $30
-    f64.const -1.2864023111638346e-14
-    f64.mul
-    f64.add
-    local.set $28
-    local.get $28
-    local.get $10
-    f64.add
-    local.set $28
-    local.get $14
-    i64.const 127
+    local.set $3
+    local.get $3
+    i64.const 9223372036854775807
     i64.and
-    i64.const 1
-    i64.shl
-    i32.wrap_i64
-    local.set $40
-    local.get $14
-    local.get $12
-    i64.extend_i32_u
-    i64.add
+    local.set $3
+    local.get $3
     i64.const 52
-    i64.const 7
+    i64.const 52
+    i64.shl
+    i64.sub
+    local.set $3
+   end
+  end
+  local.get $3
+  call $~lib/util/math/log_inline
+  local.set $9
+  global.get $~lib/util/math/log_tail
+  local.set $10
+  local.get $4
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $13
+  local.get $1
+  local.get $13
+  f64.sub
+  local.set $14
+  local.get $9
+  i64.reinterpret_f64
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $15
+  local.get $9
+  local.get $15
+  f64.sub
+  local.get $10
+  f64.add
+  local.set $16
+  local.get $13
+  local.get $15
+  f64.mul
+  local.set $11
+  local.get $14
+  local.get $15
+  f64.mul
+  local.get $1
+  local.get $16
+  f64.mul
+  f64.add
+  local.set $12
+  local.get $11
+  local.get $12
+  local.get $2
+  call $~lib/util/math/exp_inline
+ )
+ (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
+  local.get $1
+  f64.abs
+  f64.const 2
+  f64.le
+  if
+   local.get $1
+   f64.const 2
+   f64.eq
+   if
+    local.get $0
+    local.get $0
+    f64.mul
+    return
+   end
+   local.get $1
+   f64.const 0.5
+   f64.eq
+   if
+    local.get $0
+    f64.sqrt
+    f64.abs
+    f64.const inf
+    local.get $0
+    f64.const inf
+    f64.neg
+    f64.ne
+    select
+    return
+   end
+   local.get $1
+   f64.const -1
+   f64.eq
+   if
+    f64.const 1
+    local.get $0
+    f64.div
+    return
+   end
+   local.get $1
+   f64.const 1
+   f64.eq
+   if
+    local.get $0
+    return
+   end
+   local.get $1
+   f64.const 0
+   f64.eq
+   if
+    f64.const 1
+    return
+   end
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  local.get $1
+  call $~lib/util/math/pow_lut
+  return
+ )
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
+  local.get $4
+  i32.sub
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $1
+  local.get $5
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
+  local.get $1
+  f64.ne
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 6960
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 7656
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $3
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
     i64.sub
-    i64.shl
-    local.set $13
-    i32.const 4760
-    local.get $40
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load
-    f64.reinterpret_i64
-    local.set $25
-    i32.const 4760
-    local.get $40
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load offset=8
-    local.get $13
-    i64.add
-    local.set $11
-    local.get $28
-    local.get $28
-    f64.mul
-    local.set $27
-    local.get $25
-    local.get $28
-    f64.add
-    local.get $27
-    f64.const 0.49999999999996786
-    local.get $28
-    f64.const 0.16666666666665886
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $27
-    local.get $27
-    f64.mul
-    f64.const 0.0416666808410674
-    local.get $28
-    f64.const 0.008333335853059549
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $24
-    local.get $39
+    local.get $4
+    i64.ge_u
+   else
     i32.const 0
-    i32.eq
-    if
-     block $~lib/util/math/specialcase|inlined.0 (result f64)
-      local.get $24
-      local.set $18
-      local.get $11
-      local.set $44
-      local.get $14
-      local.set $43
-      local.get $43
-      i64.const 2147483648
-      i64.and
-      i64.const 0
-      i64.ne
-      i32.eqz
-      if
-       local.get $44
-       i64.const 1009
-       i64.const 52
-       i64.shl
-       i64.sub
-       local.set $44
-       local.get $44
-       f64.reinterpret_i64
-       local.set $17
-       f64.const 5486124068793688683255936e279
-       local.get $17
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       f64.mul
-       br $~lib/util/math/specialcase|inlined.0
-      end
-      local.get $44
-      i64.const 1022
-      i64.const 52
-      i64.shl
-      i64.add
-      local.set $44
-      local.get $44
-      f64.reinterpret_i64
-      local.set $17
-      local.get $17
-      local.get $17
-      local.get $18
-      f64.mul
-      f64.add
-      local.set $16
-      local.get $16
-      f64.abs
-      f64.const 1
-      f64.lt
-      if
-       f64.const 1
-       local.get $16
-       f64.copysign
-       local.set $23
-       local.get $17
-       local.get $16
-       f64.sub
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       local.set $22
-       local.get $23
-       local.get $16
-       f64.add
-       local.set $21
-       local.get $23
-       local.get $21
-       f64.sub
-       local.get $16
-       f64.add
-       local.get $22
-       f64.add
-       local.set $22
-       local.get $21
-       local.get $22
-       f64.add
-       local.get $23
-       f64.sub
-       local.set $16
-       local.get $16
-       f64.const 0
-       f64.eq
-       if
-        local.get $44
-        i64.const -9223372036854775808
-        i64.and
-        f64.reinterpret_i64
-        local.set $16
-       end
-      end
-      local.get $16
-      f64.const 2.2250738585072014e-308
-      f64.mul
-     end
-     br $~lib/util/math/exp_inline|inlined.0
+   end
+   if (result i32)
+    local.get $3
+    local.get $4
+    i64.add
+    local.get $5
+    i64.lt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
+     local.get $4
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
     end
-    local.get $11
-    f64.reinterpret_i64
-    local.set $26
-    local.get $26
-    local.get $26
-    local.get $24
-    f64.mul
-    f64.add
+   else
+    i32.const 0
+   end
+   local.set $8
+   local.get $8
+   if
+    local.get $7
+    i32.const 1
+    i32.sub
+    local.set $7
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
    end
   end
-  return
+  local.get $6
+  local.get $7
+  i32.store16
  )
  (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
@@ -1664,14 +1867,6 @@
   (local $18 i32)
   (local $19 i64)
   (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
   i32.const 0
   local.get $4
   i32.sub
@@ -1911,13 +2106,9 @@
      i32.add
      global.set $~lib/util/number/_K
      local.get $0
-     local.set $24
      local.get $15
-     local.set $18
      local.get $5
-     local.set $23
      local.get $19
-     local.set $22
      i32.const 7832
      local.get $14
      i32.const 2
@@ -1927,79 +2118,15 @@
      local.get $7
      i64.extend_i32_s
      i64.shl
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  loop $while-continue|2
    i32.const 1
    local.set $16
    local.get $16
@@ -2016,8 +2143,8 @@
     local.get $7
     i64.extend_i32_s
     i64.shr_u
-    local.set $23
-    local.get $23
+    local.set $20
+    local.get $20
     local.get $15
     i64.extend_i32_s
     i64.or
@@ -2026,16 +2153,16 @@
     if
      local.get $0
      local.get $15
-     local.tee $26
+     local.tee $18
      i32.const 1
      i32.add
      local.set $15
-     local.get $26
+     local.get $18
      i32.const 1
      i32.shl
      i32.add
      i32.const 48
-     local.get $23
+     local.get $20
      i32.wrap_i64
      i32.const 65535
      i32.and
@@ -2070,88 +2197,125 @@
      i64.mul
      local.set $10
      local.get $0
-     local.set $18
      local.get $15
-     local.set $27
      local.get $5
-     local.set $28
      local.get $13
-     local.set $22
      local.get $8
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
-    br $while-continue|4
+    br $while-continue|2
    end
   end
   unreachable
  )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $3
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $3
+  i64.const 4503599627370495
+  i64.and
+  local.set $5
+  local.get $4
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
+  i32.const 1
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
+  i32.add
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
+  i64.clz
+  i32.wrap_i64
+  local.set $7
+  local.get $6
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $6
+  local.get $4
+  local.get $7
+  i32.sub
+  local.set $4
+  global.get $~lib/util/number/_frc_pow
+  local.set $8
+  global.get $~lib/util/number/_exp_pow
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $11
+  global.get $~lib/util/number/_frc_plus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.set $12
+  global.get $~lib/util/number/_exp
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $13
+  global.get $~lib/util/number/_frc_minus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  local.set $14
+  local.get $12
+  local.get $14
+  i64.sub
+  local.set $15
+  local.get $1
+  local.get $10
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
  (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -3176,986 +3340,541 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   i32.const 0
-   i32.const 1
-   i32.lt_s
-   drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
-     local.get $3
-     local.set $6
-     local.get $6
-     if
-      local.get $5
-      local.tee $7
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $7
-      local.get $4
-      local.tee $7
-      i32.const 1
-      i32.add
-      local.set $4
-      local.get $7
-      i32.load8_u
-      i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
-     end
-    end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
-      i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
-     end
-    end
-    loop $while-continue|5
-     local.get $3
-     local.set $6
-     local.get $6
-     if
-      local.get $5
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.tee $3
-      i32.add
-      local.get $4
-      local.get $3
-      i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
-     end
-    end
-   end
-  end
- )
- (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $2
-  i32.eqz
+  local.get $0
+  local.get $1
+  i32.eq
   if
-   local.get $0
-   local.get $1
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 46
-   i32.const 48
-   i32.const 16
-   i32.shl
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 2
-   i32.add
    return
   end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
   local.get $1
   local.get $2
   i32.add
-  local.set $3
-  local.get $1
-  local.get $3
-  i32.le_s
+  local.get $0
+  i32.le_u
   if (result i32)
-   local.get $3
-   i32.const 21
-   i32.le_s
+   i32.const 1
   else
-   i32.const 0
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
   end
   if
-   local.get $1
-   local.set $4
-   loop $for-loop|0
-    local.get $4
-    local.get $3
-    i32.lt_s
-    local.set $5
-    local.get $5
-    if
-     local.get $0
-     local.get $4
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.const 48
-     i32.store16
-     local.get $4
-     i32.const 1
-     i32.add
-     local.set $4
-     br $for-loop|0
-    end
-   end
    local.get $0
-   local.get $3
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 46
-   i32.const 48
-   i32.const 16
-   i32.shl
-   i32.or
-   i32.store
-   local.get $3
-   i32.const 2
-   i32.add
+   local.get $1
+   local.get $2
+   call $~lib/util/memory/memcpy
    return
-  else
-   local.get $3
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.gt_s
-   if (result i32)
-    local.get $3
-    i32.const 21
-    i32.le_s
-   else
-    i32.const 0
-   end
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $0
-    local.get $3
-    i32.const 1
-    i32.shl
-    i32.add
-    local.set $4
-    local.get $4
-    i32.const 2
-    i32.add
-    local.get $4
-    i32.const 0
-    local.get $2
-    i32.sub
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $0
-    local.get $3
-    i32.const 1
-    i32.shl
-    i32.add
-    i32.const 46
-    i32.store16
-    local.get $1
-    i32.const 1
-    i32.add
-    return
-   else
-    i32.const -6
-    local.get $3
-    i32.lt_s
-    if (result i32)
-     local.get $3
-     i32.const 0
-     i32.le_s
-    else
-     i32.const 0
-    end
-    if
-     i32.const 2
-     local.get $3
-     i32.sub
-     local.set $4
-     local.get $0
-     local.get $4
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $0
-     local.get $1
-     i32.const 1
-     i32.shl
-     call $~lib/memory/memory.copy
+    loop $while-continue|0
      local.get $0
-     i32.const 48
-     i32.const 46
-     i32.const 16
-     i32.shl
-     i32.or
-     i32.store
-     i32.const 2
-     local.set $5
-     loop $for-loop|1
-      local.get $5
-      local.get $4
-      i32.lt_s
-      local.set $6
-      local.get $6
+     i32.const 7
+     i32.and
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $5
-       i32.const 1
-       i32.shl
-       i32.add
-       i32.const 48
-       i32.store16
-       local.get $5
-       i32.const 1
-       i32.add
-       local.set $5
-       br $for-loop|1
+       return
       end
-     end
-     local.get $1
-     local.get $4
-     i32.add
-     return
-    else
-     local.get $1
-     i32.const 1
-     i32.eq
-     if
-      local.get $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      i32.const 4
-      i32.add
-      local.set $5
-      local.get $3
+      local.get $2
       i32.const 1
       i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
+      local.set $0
       local.get $4
-      select
-      i32.store16
-      local.get $7
-      local.set $1
       local.get $1
-      i32.const 2
+      local.tee $4
+      i32.const 1
       i32.add
-      return
-     else
+      local.set $1
+      local.get $4
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
+     end
+    end
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
       local.get $1
-      i32.const 1
-      i32.shl
-      local.set $7
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
       local.get $0
-      i32.const 4
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
       i32.add
+      local.set $1
+      br $while-continue|1
+     end
+    end
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
       local.get $0
-      i32.const 2
-      i32.add
-      local.get $7
-      i32.const 2
+      local.get $2
+      i32.const 1
       i32.sub
-      call $~lib/memory/memory.copy
-      local.get $0
-      i32.const 46
-      i32.store16 offset=2
-      local.get $0
-      local.get $7
+      local.tee $2
       i32.add
-      i32.const 101
-      i32.store16 offset=2
       local.get $1
-      local.get $0
-      local.get $7
-      i32.add
-      i32.const 4
+      local.get $2
       i32.add
-      local.set $9
-      local.get $3
-      i32.const 1
+      i32.load8_u
+      i32.store8
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
       i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
+      local.set $2
+      local.get $0
+      local.get $2
       i32.add
-      local.set $1
       local.get $1
-      i32.const 2
+      local.get $2
       i32.add
-      return
+      i64.load
+      i64.store
+      br $while-continue|4
      end
-     unreachable
     end
-    unreachable
    end
-   unreachable
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
-  unreachable
  )
- (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
   local.get $1
-  f64.const 0
-  f64.lt
+  i32.const 0
+  i32.lt_s
   local.set $2
   local.get $2
   if
+   i32.const 0
    local.get $1
-   f64.neg
+   i32.sub
    local.set $1
-   local.get $0
-   i32.const 45
-   i32.store16
   end
   local.get $1
-  local.set $5
-  local.get $0
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
-  i64.reinterpret_f64
-  local.set $6
-  local.get $6
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.set $7
-  local.get $6
-  i64.const 4503599627370495
-  i64.and
-  local.set $8
-  local.get $7
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 6960
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 7656
-  local.get $14
+  call $~lib/util/number/decimalCount32
   i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $9
-  local.get $7
-  local.get $14
-  i32.sub
-  local.set $7
-  global.get $~lib/util/number/_frc_pow
-  local.set $12
-  global.get $~lib/util/number/_exp_pow
-  local.set $15
-  local.get $9
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
-  global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
-  i64.const 1
-  i64.sub
-  local.set $25
-  global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
-  local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
   i32.add
-  local.set $26
-  global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
-  i64.const 1
-  i64.add
-  local.set $27
-  local.get $25
-  local.get $27
-  i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
-  local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
+ )
+ (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $1
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 46
+   i32.const 48
+   i32.const 16
+   i32.shl
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 2
+   i32.add
+   return
+  end
+  local.get $1
+  local.get $2
+  i32.add
+  local.set $3
+  local.get $1
   local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
+  i32.le_s
+  if (result i32)
+   local.get $3
+   i32.const 21
+   i32.le_s
+  else
+   i32.const 0
+  end
+  if
+   local.get $1
+   local.set $4
+   loop $for-loop|0
+    local.get $4
+    local.get $3
+    i32.lt_s
+    local.set $5
+    local.get $5
+    if
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.const 48
+     i32.store16
+     local.get $4
+     i32.const 1
+     i32.add
+     local.set $4
+     br $for-loop|0
+    end
+   end
+   local.get $0
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 46
+   i32.const 48
+   i32.const 16
+   i32.shl
+   i32.or
+   i32.store
+   local.get $3
+   i32.const 2
+   i32.add
+   return
+  else
+   local.get $3
+   i32.const 0
+   i32.gt_s
+   if (result i32)
+    local.get $3
+    i32.const 21
+    i32.le_s
+   else
+    i32.const 0
+   end
+   if
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    local.set $4
+    local.get $4
+    i32.const 2
+    i32.add
+    local.get $4
+    i32.const 0
+    local.get $2
+    i32.sub
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.const 46
+    i32.store16
+    local.get $1
+    i32.const 1
+    i32.add
+    return
+   else
+    i32.const -6
+    local.get $3
+    i32.lt_s
+    if (result i32)
+     local.get $3
+     i32.const 0
+     i32.le_s
+    else
+     i32.const 0
+    end
+    if
+     i32.const 2
+     local.get $3
+     i32.sub
+     local.set $4
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.add
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.shl
+     call $~lib/memory/memory.copy
+     local.get $0
+     i32.const 48
+     i32.const 46
+     i32.const 16
+     i32.shl
+     i32.or
+     i32.store
+     i32.const 2
+     local.set $5
+     loop $for-loop|1
+      local.get $5
+      local.get $4
+      i32.lt_s
+      local.set $6
+      local.get $6
+      if
+       local.get $0
+       local.get $5
+       i32.const 1
+       i32.shl
+       i32.add
+       i32.const 48
+       i32.store16
+       local.get $5
+       i32.const 1
+       i32.add
+       local.set $5
+       br $for-loop|1
+      end
+     end
+     local.get $1
+     local.get $4
+     i32.add
+     return
+    else
+     local.get $1
+     i32.const 1
+     i32.eq
+     if
+      local.get $0
+      i32.const 101
+      i32.store16 offset=2
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     else
+      local.get $1
+      i32.const 1
+      i32.shl
+      local.set $4
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $0
+      i32.const 2
+      i32.add
+      local.get $4
+      i32.const 2
+      i32.sub
+      call $~lib/memory/memory.copy
+      local.get $0
+      i32.const 46
+      i32.store16 offset=2
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 101
+      i32.store16 offset=2
+      local.get $1
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      i32.add
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     end
+     unreachable
+    end
+    unreachable
+   end
+   unreachable
+  end
+  unreachable
+ )
+ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  f64.const 0
+  f64.lt
+  local.set $2
+  local.get $2
+  if
+   local.get $1
+   f64.neg
+   local.set $1
+   local.get $0
+   i32.const 45
+   i32.store16
+  end
+  local.get $1
+  local.get $0
+  local.get $2
+  call $~lib/util/number/grisu2
+  local.set $3
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
diff --git a/tests/compiler/resolve-elementaccess.optimized.wat b/tests/compiler/resolve-elementaccess.optimized.wat
index e3812e440d..46da6f5034 100644
--- a/tests/compiler/resolve-elementaccess.optimized.wat
+++ b/tests/compiler/resolve-elementaccess.optimized.wat
@@ -1,15 +1,17 @@
 (module
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_i32_f32_=>_none (func (param i32 i32 f32)))
- (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
- (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
- (type $f32_=>_i32 (func (param f32) (result i32)))
+ (type $i32_i64_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i64 i32 i64 i32) (result i32)))
+ (type $f64_=>_i32 (func (param f64) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -129,161 +131,171 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
   (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -310,7 +322,7 @@
   call $~lib/rt/stub/__alloc
   local.tee $2
   local.get $1
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $0
   i32.eqz
   if
@@ -389,25 +401,70 @@
   i32.add
   f32.load
  )
- (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
-  local.get $0
-  i32.const 10
-  i32.ge_u
-  i32.const 1
-  i32.add
-  local.get $0
-  i32.const 10000
-  i32.ge_u
-  i32.const 3
-  i32.add
-  local.get $0
-  i32.const 1000
-  i32.ge_u
-  i32.add
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.tee $2
   local.get $0
-  i32.const 100
-  i32.lt_u
-  select
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
+  local.get $3
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
+ (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
+  local.get $0
+  i32.const 10
+  i32.ge_u
+  i32.const 1
+  i32.add
+  local.get $0
+  i32.const 10000
+  i32.ge_u
+  i32.const 3
+  i32.add
+  local.get $0
+  i32.const 1000
+  i32.ge_u
+  i32.add
+  local.get $0
+  i32.const 100
+  i32.lt_u
+  select
   local.get $0
   i32.const 1000000
   i32.ge_u
@@ -431,42 +488,98 @@
   i32.lt_u
   select
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (param $5 i32) (result i32)
+  (local $6 i32)
   (local $7 i32)
-  (local $8 i64)
+  (local $8 i32)
   (local $9 i64)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i64)
   (local $12 i64)
-  (local $13 i64)
-  local.get $3
+  local.get $2
   local.get $1
   i64.sub
   local.set $9
-  local.get $3
+  local.get $2
   i64.const 1
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
-  local.tee $10
+  local.tee $8
   i64.extend_i32_s
   i64.shl
-  local.tee $11
+  local.tee $10
   i64.const 1
   i64.sub
-  local.tee $12
+  local.tee $11
   i64.and
-  local.set $8
-  local.get $3
-  local.get $10
+  local.set $1
+  local.get $2
+  local.get $8
   i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $7
+  local.tee $6
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $3
   loop $while-continue|0
-   local.get $4
+   local.get $3
    i32.const 0
    i32.gt_s
    if
@@ -481,523 +594,568 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
-               local.tee $2
+               local.get $3
+               local.tee $7
                i32.const 10
                i32.ne
                if
-                local.get $2
+                local.get $7
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $7
+               local.get $6
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $7
+               local.set $3
+               local.get $6
                i32.const 1000000000
                i32.rem_u
-               local.set $7
+               local.set $6
                br $break|1
               end
-              local.get $7
+              local.get $6
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $7
+              local.set $3
+              local.get $6
               i32.const 100000000
               i32.rem_u
-              local.set $7
+              local.set $6
               br $break|1
              end
-             local.get $7
+             local.get $6
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $7
+             local.set $3
+             local.get $6
              i32.const 10000000
              i32.rem_u
-             local.set $7
+             local.set $6
              br $break|1
             end
-            local.get $7
+            local.get $6
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $7
+            local.set $3
+            local.get $6
             i32.const 1000000
             i32.rem_u
-            local.set $7
+            local.set $6
             br $break|1
            end
-           local.get $7
+           local.get $6
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $7
+           local.set $3
+           local.get $6
            i32.const 100000
            i32.rem_u
-           local.set $7
+           local.set $6
            br $break|1
           end
-          local.get $7
+          local.get $6
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $7
+          local.set $3
+          local.get $6
           i32.const 10000
           i32.rem_u
-          local.set $7
+          local.set $6
           br $break|1
          end
-         local.get $7
+         local.get $6
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $7
+         local.set $3
+         local.get $6
          i32.const 1000
          i32.rem_u
-         local.set $7
+         local.set $6
          br $break|1
         end
-        local.get $7
+        local.get $6
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $7
+        local.set $3
+        local.get $6
         i32.const 100
         i32.rem_u
-        local.set $7
+        local.set $6
         br $break|1
        end
-       local.get $7
+       local.get $6
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $7
+       local.set $3
+       local.get $6
        i32.const 10
        i32.rem_u
-       local.set $7
+       local.set $6
        br $break|1
       end
-      local.get $7
-      local.set $2
+      local.get $6
+      local.set $3
       i32.const 0
-      local.set $7
+      local.set $6
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $6
+    local.get $3
+    local.get $5
     i32.or
     if
      local.get $0
-     local.get $6
+     local.get $5
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $6
+     local.get $5
      i32.const 1
      i32.add
-     local.set $6
+     local.set $5
     end
-    local.get $4
+    local.get $7
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $8
-    local.get $7
+    local.set $3
+    local.get $1
+    local.get $6
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $3
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $5
      local.get $4
+     local.get $2
+     local.get $3
      i32.const 2
      i32.shl
      i32.const 2280
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $6
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $2
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $2
-     local.get $4
-     i32.store16
-     local.get $6
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $5
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $13
-  loop $while-continue|4 (result i32)
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $8
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $13
-   i64.shr_u
    local.tee $1
-   local.get $6
+   local.get $2
+   i64.shr_u
+   local.tee $12
+   local.get $5
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $6
+    local.get $5
     i32.const 1
     i32.shl
     i32.add
-    local.get $1
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
     i32.store16
-    local.get $6
+    local.get $5
     i32.const 1
     i32.add
-    local.set $6
+    local.set $5
    end
-   local.get $4
-   i32.const 1
-   i32.sub
-   local.set $4
    local.get $3
-   local.get $12
-   i64.and
-   local.tee $8
-   local.get $5
-   i64.ge_u
-   br_if $while-continue|4
-   local.get $4
-   global.get $~lib/util/number/_K
-   i32.add
-   global.set $~lib/util/number/_K
-   local.get $8
-   local.set $1
-   local.get $9
-   i32.const 0
-   local.get $4
-   i32.sub
-   i32.const 2
-   i32.shl
-   i32.const 2280
-   i32.add
-   i64.load32_u
-   i64.mul
-   local.set $3
-   local.get $0
-   local.get $6
    i32.const 1
    i32.sub
-   i32.const 1
-   i32.shl
-   i32.add
-   local.tee $2
-   i32.load16_u
-   local.set $4
-   loop $while-continue|6
-    i32.const 1
-    local.get $3
-    local.get $1
-    i64.sub
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.sub
-    i64.gt_u
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.lt_u
-    select
-    i32.const 0
-    local.get $5
-    local.get $1
-    i64.sub
-    local.get $11
-    i64.ge_u
-    i32.const 0
-    local.get $1
-    local.get $3
-    i64.lt_u
-    select
-    select
-    if
-     local.get $4
-     i32.const 1
-     i32.sub
-     local.set $4
-     local.get $1
-     local.get $11
-     i64.add
-     local.set $1
-     br $while-continue|6
-    end
-   end
-   local.get $2
+   local.set $3
+   local.get $1
+   local.get $11
+   i64.and
+   local.tee $1
    local.get $4
-   i32.store16
-   local.get $6
+   i64.ge_u
+   br_if $while-continue|2
   end
- )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
-   local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.get $1
-   i32.lt_u
-   if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+  local.get $3
+  global.get $~lib/util/number/_K
+  i32.add
+  global.set $~lib/util/number/_K
+  local.get $0
+  local.get $5
+  local.get $4
+  local.get $1
+  local.get $10
+  local.get $9
+  i32.const 0
+  local.get $3
+  i32.sub
+  i32.const 2
+  i32.shl
+  i32.const 2280
+  i32.add
+  i64.load32_u
+  i64.mul
+  call $~lib/util/number/grisuRound
+  local.get $5
+ )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i32)
+  (local $6 i64)
+  (local $7 i32)
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $4
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $5
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $4
+  i64.const 4503599627370495
+  i64.and
+  i64.add
+  local.tee $4
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.tee $6
+  i64.clz
+  i32.wrap_i64
+  local.set $3
+  local.get $6
+  local.get $3
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_plus
+  local.get $5
+  i32.const 1
+  local.get $5
+  select
+  i32.const 1075
+  i32.sub
+  local.tee $5
+  i32.const 1
+  i32.sub
+  local.get $3
+  i32.sub
+  local.set $3
+  local.get $4
+  local.get $4
+  i64.const 4503599627370496
+  i64.eq
+  i32.const 1
+  i32.add
+  local.tee $7
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $5
+  local.get $7
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+  i32.const 348
+  i32.const -61
+  global.get $~lib/util/number/_exp
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.tee $0
+  i32.trunc_f64_s
+  local.tee $3
+  local.get $3
+  f64.convert_i32_s
+  local.get $0
+  f64.ne
+  i32.add
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.tee $3
+  i32.const 3
+  i32.shl
+  local.tee $7
+  i32.sub
+  global.set $~lib/util/number/_K
+  local.get $7
+  i32.const 1408
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.const 2104
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $3
+  local.get $1
+  local.get $4
+  local.get $4
+  i64.clz
+  i32.wrap_i64
+  i64.extend_i32_s
+  i64.shl
+  global.get $~lib/util/number/_frc_pow
+  local.tee $4
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $6
+  global.get $~lib/util/number/_exp
+  local.get $3
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $6
+  global.get $~lib/util/number/_frc_minus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
-      i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
-     end
-    end
-    loop $while-continue|5
-     local.get $4
-     if
-      local.get $4
-      i32.const 1
       i32.sub
-      local.tee $4
+      local.set $2
       local.get $0
+      i32.const 8
       i32.add
+      local.set $0
       local.get $1
-      local.get $4
+      i32.const 8
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      local.set $1
+      br $while-continue|1
      end
     end
    end
-  end
- )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  loop $do-continue|0
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
+  end
+ )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  loop $do-continue|0
    local.get $1
    i32.const 10
    i32.rem_u
@@ -1022,6 +1180,34 @@
    br_if $do-continue|0
   end
  )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $1
+ )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $2
@@ -1106,7 +1292,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $0
     i32.const 46
     i32.store16
@@ -1135,7 +1321,7 @@
      local.get $1
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $0
      i32.const 3014704
      i32.store
@@ -1172,446 +1358,99 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $1
       i32.const 4
       i32.add
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
-      i32.const 2
-      i32.add
-     else
-      local.get $0
-      i32.const 4
-      i32.add
-      local.get $0
-      i32.const 2
-      i32.add
-      local.get $1
-      i32.const 1
-      i32.shl
-      local.tee $2
-      i32.const 2
-      i32.sub
-      call $~lib/memory/memory.copy
-      local.get $0
-      i32.const 46
-      i32.store16 offset=2
-      local.get $0
-      local.get $2
-      i32.add
-      local.tee $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      local.tee $2
-      i32.const 4
-      i32.add
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
-      local.get $0
-      local.get $1
-      i32.add
-      i32.const 2
-      i32.add
-     end
-    end
-   end
-  end
- )
- (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i32)
-  (local $7 i64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i64)
-  local.get $1
-  f64.const 0
-  f64.lt
-  local.tee $8
-  if (result f64)
-   local.get $0
-   i32.const 45
-   i32.store16
-   local.get $1
-   f64.neg
-  else
-   local.get $1
-  end
-  i64.reinterpret_f64
-  local.tee $3
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.tee $6
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $3
-  i64.const 4503599627370495
-  i64.and
-  i64.add
-  local.tee $2
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.tee $3
-  local.get $3
-  i64.clz
-  i32.wrap_i64
-  local.tee $4
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_plus
-  local.get $6
-  i32.const 1
-  local.get $6
-  select
-  i32.const 1075
-  i32.sub
-  local.tee $6
-  i32.const 1
-  i32.sub
-  local.get $4
-  i32.sub
-  local.set $4
-  local.get $2
-  local.get $2
-  i64.const 4503599627370496
-  i64.eq
-  i32.const 1
-  i32.add
-  local.tee $9
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $6
-  local.get $9
-  i32.sub
-  local.get $4
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $4
-  global.set $~lib/util/number/_exp
-  i32.const 348
-  i32.const -61
-  global.get $~lib/util/number/_exp
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.tee $1
-  i32.trunc_f64_s
-  local.tee $4
-  local.get $4
-  f64.convert_i32_s
-  local.get $1
-  f64.ne
-  i32.add
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.tee $4
-  i32.const 3
-  i32.shl
-  local.tee $9
-  i32.sub
-  global.set $~lib/util/number/_K
-  local.get $9
-  i32.const 1408
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  local.get $4
-  i32.const 1
-  i32.shl
-  i32.const 2104
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  global.get $~lib/util/number/_frc_pow
-  local.tee $3
-  i64.const 4294967295
-  i64.and
-  local.set $5
-  local.get $0
-  local.get $8
-  i32.const 1
-  i32.shl
-  i32.add
-  local.get $0
-  local.get $2
-  local.get $2
-  i64.clz
-  i32.wrap_i64
-  local.tee $0
-  i64.extend_i32_s
-  i64.shl
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $10
-  i64.mul
-  local.get $5
-  local.get $7
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $5
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $10
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $4
-  local.get $6
-  local.get $0
-  i32.sub
-  i32.add
-  i32.const -64
-  i32.sub
-  global.get $~lib/util/number/_frc_plus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $10
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $10
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $2
-  local.get $4
-  global.get $~lib/util/number/_exp
-  i32.add
-  i32.const -64
-  i32.sub
-  local.get $2
-  global.get $~lib/util/number/_frc_minus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $3
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $3
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $3
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  local.get $8
-  call $~lib/util/number/genDigits
-  local.get $8
-  i32.sub
-  global.get $~lib/util/number/_K
-  call $~lib/util/number/prettify
-  local.get $8
-  i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      i32.const 2
+      i32.add
+     else
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $0
+      i32.const 2
+      i32.add
+      local.get $1
+      i32.const 1
+      i32.shl
+      local.tee $2
+      i32.const 2
+      i32.sub
+      call $~lib/util/memory/memmove
+      local.get $0
+      i32.const 46
+      i32.store16 offset=2
+      local.get $0
+      local.get $2
+      i32.add
+      local.tee $0
+      i32.const 101
+      i32.store16 offset=2
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.add
+     end
+    end
+   end
+  end
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
+ (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  i32.const 0
   local.get $0
   i32.const 16
   i32.sub
   i32.load offset=12
   i32.const 1
   i32.shr_u
- )
- (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
+  local.tee $2
   i32.const 0
-  local.get $0
-  call $~lib/string/String#get:length
-  local.tee $4
+  local.get $2
   i32.lt_s
-  local.set $2
+  select
+  local.tee $3
   local.get $1
   i32.const 0
   local.get $1
   i32.const 0
   i32.gt_s
   select
-  local.tee $3
-  local.get $4
-  i32.lt_s
-  local.set $1
-  i32.const 0
-  local.get $4
+  local.tee $1
   local.get $2
-  select
-  local.tee $2
-  local.get $3
-  local.get $4
   local.get $1
-  select
-  local.tee $3
   local.get $2
+  i32.lt_s
+  select
+  local.tee $1
   local.get $3
+  local.get $1
   i32.gt_s
   select
   i32.const 1
   i32.shl
-  local.tee $1
-  local.get $2
+  local.tee $4
   local.get $3
-  local.get $2
+  local.get $1
   local.get $3
+  local.get $1
   i32.lt_s
   select
   i32.const 1
   i32.shl
-  local.tee $2
+  local.tee $1
   i32.sub
   local.tee $3
   i32.eqz
@@ -1620,12 +1459,12 @@
    return
   end
   i32.const 0
-  local.get $1
   local.get $4
+  local.get $2
   i32.const 1
   i32.shl
   i32.eq
-  local.get $2
+  local.get $1
   select
   if
    local.get $0
@@ -1634,110 +1473,131 @@
   local.get $3
   i32.const 1
   call $~lib/rt/stub/__alloc
-  local.tee $1
+  local.tee $2
   local.get $0
-  local.get $2
+  local.get $1
   i32.add
   local.get $3
-  call $~lib/memory/memory.copy
-  local.get $1
+  call $~lib/util/memory/memmove
+  local.get $2
  )
- (func $~lib/number/F32#toString (param $0 f32) (result i32)
+ (func $~lib/util/number/dtoa (param $0 f64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 f64)
-  block $__inlined_func$~lib/util/number/dtoa
+  local.get $0
+  f64.const 0
+  f64.eq
+  if
+   i32.const 1280
+   return
+  end
+  local.get $0
+  local.get $0
+  f64.sub
+  f64.const 0
+  f64.ne
+  if
+   local.get $0
    local.get $0
-   f64.promote_f32
-   local.tee $4
-   f64.const 0
-   f64.eq
-   if
-    i32.const 1280
-    local.set $2
-    br $__inlined_func$~lib/util/number/dtoa
-   end
-   local.get $4
-   local.get $4
-   f64.sub
-   f64.const 0
    f64.ne
    if
-    local.get $4
-    local.get $4
-    f64.ne
-    if
-     i32.const 1312
-     local.set $2
-     br $__inlined_func$~lib/util/number/dtoa
-    end
-    i32.const 1344
-    i32.const 1392
-    local.get $4
-    f64.const 0
-    f64.lt
-    select
-    local.set $2
-    br $__inlined_func$~lib/util/number/dtoa
+    i32.const 1312
+    return
    end
-   i32.const 56
-   i32.const 1
-   call $~lib/rt/stub/__alloc
-   local.tee $2
-   local.get $4
-   call $~lib/util/number/dtoa_core
-   local.tee $1
-   i32.const 28
-   i32.eq
-   br_if $__inlined_func$~lib/util/number/dtoa
-   local.get $2
-   local.get $1
-   call $~lib/string/String#substring
-   local.get $2
-   i32.const 15
-   i32.and
-   i32.eqz
-   i32.const 0
-   local.get $2
+   i32.const 1344
+   i32.const 1392
+   local.get $0
+   f64.const 0
+   f64.lt
    select
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 2352
-    i32.const 70
-    i32.const 3
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $2
-   i32.const 16
-   i32.sub
-   local.tee $3
-   i32.load offset=4
-   i32.const 1
-   i32.ne
-   if
-    i32.const 0
-    i32.const 2352
-    i32.const 72
-    i32.const 14
-    call $~lib/builtins/abort
-    unreachable
-   end
-   global.get $~lib/rt/stub/offset
+   return
+  end
+  i32.const 56
+  i32.const 1
+  call $~lib/rt/stub/__alloc
+  local.tee $3
+  local.set $2
+  local.get $0
+  f64.const 0
+  f64.lt
+  local.tee $1
+  if
    local.get $2
+   i32.const 45
+   i32.store16
+   local.get $0
+   f64.neg
+   local.set $0
+  end
+  local.get $2
+  local.get $1
+  i32.const 1
+  i32.shl
+  i32.add
+  local.get $0
+  local.get $2
+  local.get $1
+  call $~lib/util/number/grisu2
+  local.get $1
+  i32.sub
+  global.get $~lib/util/number/_K
+  call $~lib/util/number/prettify
+  local.get $1
+  i32.add
+  local.tee $1
+  local.set $2
+  local.get $1
+  i32.const 28
+  i32.eq
+  if
    local.get $3
-   i32.load
-   i32.add
-   i32.eq
-   if
-    local.get $3
-    global.set $~lib/rt/stub/offset
-   end
-   local.set $2
+   return
   end
+  local.get $3
   local.get $2
+  call $~lib/string/String#substring
+  local.get $3
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $3
+  select
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 2352
+   i32.const 70
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 16
+  i32.sub
+  local.tee $1
+  i32.load offset=4
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 2352
+   i32.const 72
+   i32.const 14
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $~lib/rt/stub/offset
+  local.get $3
+  local.get $1
+  i32.load
+  i32.add
+  i32.eq
+  if
+   local.get $1
+   global.set $~lib/rt/stub/offset
+  end
  )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -1832,10 +1692,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -1889,26 +1757,28 @@
  (func $~lib/number/U8#toString (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  i32.const 2560
-  local.set $1
-  local.get $0
-  i32.const 255
-  i32.and
-  local.tee $0
-  if
+  block $__inlined_func$~lib/util/number/utoa32 (result i32)
+   i32.const 2560
    local.get $0
+   i32.const 255
+   i32.and
+   local.tee $1
+   i32.eqz
+   br_if $__inlined_func$~lib/util/number/utoa32
+   drop
+   local.get $1
    call $~lib/util/number/decimalCount32
-   local.tee $2
+   local.tee $0
    i32.const 1
    i32.shl
    i32.const 1
    call $~lib/rt/stub/__alloc
-   local.tee $1
+   local.tee $2
+   local.get $1
    local.get $0
+   call $~lib/util/number/utoa32_core
    local.get $2
-   call $~lib/util/number/utoa_simple<u32>
   end
-  local.get $1
  )
  (func $start:resolve-elementaccess
   (local $0 i32)
@@ -1931,7 +1801,8 @@
   global.get $resolve-elementaccess/arr
   i32.const 0
   call $~lib/typedarray/Float32Array#__get
-  call $~lib/number/F32#toString
+  f64.promote_f32
+  call $~lib/util/number/dtoa
   i32.const 2400
   call $~lib/string/String.__eq
   i32.eqz
@@ -1946,7 +1817,8 @@
   global.get $resolve-elementaccess/arr
   i32.const 1
   call $~lib/typedarray/Float32Array#__get
-  call $~lib/number/F32#toString
+  f64.promote_f32
+  call $~lib/util/number/dtoa
   i32.const 2496
   call $~lib/string/String.__eq
   i32.eqz
@@ -1970,7 +1842,8 @@
   local.get $0
   i32.const 0
   call $~lib/typedarray/Float32Array#__get
-  call $~lib/number/F32#toString
+  f64.promote_f32
+  call $~lib/util/number/dtoa
   i32.const 2528
   call $~lib/string/String.__eq
   i32.eqz
@@ -2007,13 +1880,14 @@
   i32.const 4
   call $~lib/rt/stub/__alloc
   local.tee $0
-  if (result i32)
-   local.get $0
-  else
+  i32.eqz
+  if
    i32.const 12
    i32.const 5
    call $~lib/rt/stub/__alloc
+   local.set $0
   end
+  local.get $0
   i32.const 0
   call $~lib/arraybuffer/ArrayBufferView#constructor
   global.set $resolve-elementaccess/buf
diff --git a/tests/compiler/resolve-elementaccess.untouched.wat b/tests/compiler/resolve-elementaccess.untouched.wat
index 34ec5fba67..8033aed085 100644
--- a/tests/compiler/resolve-elementaccess.untouched.wat
+++ b/tests/compiler/resolve-elementaccess.untouched.wat
@@ -1,17 +1,21 @@
 (module
- (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_i32_f32_=>_none (func (param i32 i32 f32)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $f32_=>_i32 (func (param f32) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -161,302 +165,297 @@
   i32.store offset=12
   local.get $2
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
-    i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
-   end
-  end
- )
- (func $~lib/rt/stub/__retain (param $0 i32) (result i32)
-  local.get $0
- )
- (func $~lib/rt/stub/__release (param $0 i32)
-  nop
- )
- (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  local.get $1
-  i32.const 1073741808
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
   local.get $2
-  i32.shr_u
-  i32.gt_u
+  i32.eqz
   if
-   i32.const 32
-   i32.const 80
-   i32.const 18
-   i32.const 57
-   call $~lib/builtins/abort
-   unreachable
+   return
   end
-  local.get $1
+  local.get $0
   local.get $2
-  i32.shl
-  local.tee $1
-  i32.const 0
-  call $~lib/rt/stub/__alloc
+  i32.add
+  i32.const 4
+  i32.sub
   local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
   local.get $3
-  i32.const 0
   local.get $1
-  call $~lib/memory/memory.fill
-  local.get $0
-  i32.eqz
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
   if
-   i32.const 12
-   i32.const 2
-   call $~lib/rt/stub/__alloc
-   call $~lib/rt/stub/__retain
-   local.set $0
+   return
   end
   local.get $0
-  i32.const 0
-  i32.store
-  local.get $0
-  i32.const 0
-  i32.store offset=4
-  local.get $0
-  i32.const 0
-  i32.store offset=8
+  local.get $1
+  i32.store8 offset=1
   local.get $0
-  local.tee $4
+  local.get $1
+  i32.store8 offset=2
   local.get $3
-  local.tee $5
-  local.get $4
-  i32.load
-  local.tee $6
-  i32.ne
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
   if
-   local.get $5
-   call $~lib/rt/stub/__retain
-   local.set $5
-   local.get $6
-   call $~lib/rt/stub/__release
+   return
   end
-  local.get $5
-  i32.store
   local.get $0
+  local.get $1
+  i32.store8 offset=3
   local.get $3
-  i32.store offset=4
-  local.get $0
   local.get $1
-  i32.store offset=8
-  local.get $0
- )
- (func $~lib/typedarray/Float32Array#constructor (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  if (result i32)
-   local.get $0
-  else
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
+   local.set $7
+   local.get $7
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
+    i32.const 32
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
+   end
+  end
+ )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
+ (func $~lib/rt/stub/__retain (param $0 i32) (result i32)
+  local.get $0
+ )
+ (func $~lib/rt/stub/__release (param $0 i32)
+  nop
+ )
+ (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $1
+  i32.const 1073741808
+  local.get $2
+  i32.shr_u
+  i32.gt_u
+  if
+   i32.const 32
+   i32.const 80
+   i32.const 18
+   i32.const 57
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $2
+  i32.shl
+  local.tee $1
+  i32.const 0
+  call $~lib/rt/stub/__alloc
+  local.set $3
+  local.get $3
+  i32.const 0
+  local.get $1
+  call $~lib/memory/memory.fill
+  local.get $0
+  i32.eqz
+  if
+   i32.const 12
+   i32.const 2
+   call $~lib/rt/stub/__alloc
+   call $~lib/rt/stub/__retain
+   local.set $0
+  end
+  local.get $0
+  i32.const 0
+  i32.store
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $0
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  i32.load
+  local.tee $6
+  i32.ne
+  if
+   local.get $5
+   call $~lib/rt/stub/__retain
+   local.set $5
+   local.get $6
+   call $~lib/rt/stub/__release
+  end
+  local.get $5
+  i32.store
+  local.get $0
+  local.get $3
+  i32.store offset=4
+  local.get $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+ )
+ (func $~lib/typedarray/Float32Array#constructor (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  if (result i32)
+   local.get $0
+  else
    i32.const 12
    i32.const 3
    call $~lib/rt/stub/__alloc
@@ -515,41 +514,215 @@
   i32.add
   f32.load
  )
- (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
   local.get $0
-  i32.const 100000
-  i32.lt_u
-  if
-   local.get $0
-   i32.const 100
-   i32.lt_u
-   if
-    i32.const 1
-    local.get $0
-    i32.const 10
-    i32.ge_u
-    i32.add
-    return
-   else
-    i32.const 3
-    local.get $0
-    i32.const 10000
-    i32.ge_u
-    i32.add
-    local.get $0
-    i32.const 1000
-    i32.ge_u
-    i32.add
-    return
-   end
-   unreachable
-  else
-   local.get $0
-   i32.const 10000000
-   i32.lt_u
-   if
-    i32.const 6
-    local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
+  local.get $4
+  i32.sub
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $1
+  local.get $5
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
+  local.get $1
+  f64.ne
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 400
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 1096
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $3
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
+ (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
+  local.get $0
+  i32.const 100000
+  i32.lt_u
+  if
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
+    i32.const 1
+    local.get $0
+    i32.const 10
+    i32.ge_u
+    i32.add
+    return
+   else
+    i32.const 3
+    local.get $0
+    i32.const 10000
+    i32.ge_u
+    i32.add
+    local.get $0
+    i32.const 1000
+    i32.ge_u
+    i32.add
+    return
+   end
+   unreachable
+  else
+   local.get $0
+   i32.const 10000000
+   i32.lt_u
+   if
+    i32.const 6
+    local.get $0
     i32.const 1000000
     i32.ge_u
     i32.add
@@ -570,6 +743,74 @@
   end
   unreachable
  )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
+    i64.sub
+    local.get $4
+    i64.ge_u
+   else
+    i32.const 0
+   end
+   if (result i32)
+    local.get $3
+    local.get $4
+    i64.add
+    local.get $5
+    i64.lt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
+     local.get $4
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
+    end
+   else
+    i32.const 0
+   end
+   local.set $8
+   local.get $8
+   if
+    local.get $7
+    i32.const 1
+    i32.sub
+    local.set $7
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $6
+  local.get $7
+  i32.store16
+ )
  (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i64)
@@ -585,14 +826,6 @@
   (local $18 i32)
   (local $19 i64)
   (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
   i32.const 0
   local.get $4
   i32.sub
@@ -832,13 +1065,9 @@
      i32.add
      global.set $~lib/util/number/_K
      local.get $0
-     local.set $24
      local.get $15
-     local.set $18
      local.get $5
-     local.set $23
      local.get $19
-     local.set $22
      i32.const 1272
      local.get $14
      i32.const 2
@@ -848,79 +1077,15 @@
      local.get $7
      i64.extend_i32_s
      i64.shl
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  loop $while-continue|2
    i32.const 1
    local.set $16
    local.get $16
@@ -937,8 +1102,8 @@
     local.get $7
     i64.extend_i32_s
     i64.shr_u
-    local.set $23
-    local.get $23
+    local.set $20
+    local.get $20
     local.get $15
     i64.extend_i32_s
     i64.or
@@ -947,16 +1112,16 @@
     if
      local.get $0
      local.get $15
-     local.tee $26
+     local.tee $18
      i32.const 1
      i32.add
      local.set $15
-     local.get $26
+     local.get $18
      i32.const 1
      i32.shl
      i32.add
      i32.const 48
-     local.get $23
+     local.get $20
      i32.wrap_i64
      i32.const 65535
      i32.and
@@ -991,88 +1156,125 @@
      i64.mul
      local.set $10
      local.get $0
-     local.set $18
      local.get $15
-     local.set $27
      local.get $5
-     local.set $28
      local.get $13
-     local.set $22
      local.get $8
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
-    br $while-continue|4
+    br $while-continue|2
    end
   end
   unreachable
  )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $3
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $3
+  i64.const 4503599627370495
+  i64.and
+  local.set $5
+  local.get $4
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
+  i32.const 1
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
+  i32.add
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
+  i64.clz
+  i32.wrap_i64
+  local.set $7
+  local.get $6
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $6
+  local.get $4
+  local.get $7
+  i32.sub
+  local.set $4
+  global.get $~lib/util/number/_frc_pow
+  local.set $8
+  global.get $~lib/util/number/_exp_pow
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $11
+  global.get $~lib/util/number/_frc_plus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.set $12
+  global.get $~lib/util/number/_exp
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $13
+  global.get $~lib/util/number/_frc_minus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  local.set $14
+  local.get $12
+  local.get $14
+  i64.sub
+  local.set $15
+  local.get $1
+  local.get $10
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
  (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2097,238 +2299,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $4
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $4
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
      end
-     loop $while-continue|1
-      local.get $3
+    end
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|2
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
+      i32.sub
+      local.tee $2
       i32.add
-      local.set $5
-      local.get $7
-      local.get $4
-      local.tee $7
-      i32.const 1
+      local.get $1
+      local.get $2
       i32.add
-      local.set $4
-      local.get $7
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
-     end
-    end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
-      i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      br $while-continue|3
      end
     end
-    loop $while-continue|5
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
-      i32.const 1
+      local.get $2
+      i32.const 8
       i32.sub
-      local.tee $3
+      local.set $2
+      local.get $0
+      local.get $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/util/number/utoa32_lut (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2469,16 +2666,52 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.set $2
+  local.get $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
+ )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $2
   i32.eqz
   if
@@ -2497,726 +2730,260 @@
    i32.const 2
    i32.add
    return
-  end
-  local.get $1
-  local.get $2
-  i32.add
-  local.set $3
-  local.get $1
-  local.get $3
-  i32.le_s
-  if (result i32)
-   local.get $3
-   i32.const 21
-   i32.le_s
-  else
-   i32.const 0
-  end
-  if
-   local.get $1
-   local.set $4
-   loop $for-loop|0
-    local.get $4
-    local.get $3
-    i32.lt_s
-    local.set $5
-    local.get $5
-    if
-     local.get $0
-     local.get $4
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.const 48
-     i32.store16
-     local.get $4
-     i32.const 1
-     i32.add
-     local.set $4
-     br $for-loop|0
-    end
-   end
-   local.get $0
-   local.get $3
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 46
-   i32.const 48
-   i32.const 16
-   i32.shl
-   i32.or
-   i32.store
-   local.get $3
-   i32.const 2
-   i32.add
-   return
-  else
-   local.get $3
-   i32.const 0
-   i32.gt_s
-   if (result i32)
-    local.get $3
-    i32.const 21
-    i32.le_s
-   else
-    i32.const 0
-   end
-   if
-    local.get $0
-    local.get $3
-    i32.const 1
-    i32.shl
-    i32.add
-    local.set $4
-    local.get $4
-    i32.const 2
-    i32.add
-    local.get $4
-    i32.const 0
-    local.get $2
-    i32.sub
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $0
-    local.get $3
-    i32.const 1
-    i32.shl
-    i32.add
-    i32.const 46
-    i32.store16
-    local.get $1
-    i32.const 1
-    i32.add
-    return
-   else
-    i32.const -6
-    local.get $3
-    i32.lt_s
-    if (result i32)
-     local.get $3
-     i32.const 0
-     i32.le_s
-    else
-     i32.const 0
-    end
-    if
-     i32.const 2
-     local.get $3
-     i32.sub
-     local.set $4
-     local.get $0
-     local.get $4
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $0
-     local.get $1
-     i32.const 1
-     i32.shl
-     call $~lib/memory/memory.copy
-     local.get $0
-     i32.const 48
-     i32.const 46
-     i32.const 16
-     i32.shl
-     i32.or
-     i32.store
-     i32.const 2
-     local.set $5
-     loop $for-loop|1
-      local.get $5
-      local.get $4
-      i32.lt_s
-      local.set $6
-      local.get $6
-      if
-       local.get $0
-       local.get $5
-       i32.const 1
-       i32.shl
-       i32.add
-       i32.const 48
-       i32.store16
-       local.get $5
-       i32.const 1
-       i32.add
-       local.set $5
-       br $for-loop|1
-      end
-     end
-     local.get $1
-     local.get $4
-     i32.add
-     return
-    else
-     local.get $1
-     i32.const 1
-     i32.eq
-     if
-      local.get $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      i32.const 4
-      i32.add
-      local.set $5
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $7
-      local.set $1
-      local.get $1
-      i32.const 2
-      i32.add
-      return
-     else
-      local.get $1
-      i32.const 1
-      i32.shl
-      local.set $7
-      local.get $0
-      i32.const 4
-      i32.add
-      local.get $0
-      i32.const 2
-      i32.add
-      local.get $7
-      i32.const 2
-      i32.sub
-      call $~lib/memory/memory.copy
-      local.get $0
-      i32.const 46
-      i32.store16 offset=2
-      local.get $0
-      local.get $7
-      i32.add
-      i32.const 101
-      i32.store16 offset=2
-      local.get $1
-      local.get $0
-      local.get $7
-      i32.add
-      i32.const 4
-      i32.add
-      local.set $9
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
-      i32.add
-      local.set $1
-      local.get $1
-      i32.const 2
-      i32.add
-      return
-     end
-     unreachable
-    end
-    unreachable
-   end
-   unreachable
-  end
-  unreachable
- )
- (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
-  local.get $1
-  f64.const 0
-  f64.lt
-  local.set $2
-  local.get $2
-  if
-   local.get $1
-   f64.neg
-   local.set $1
-   local.get $0
-   i32.const 45
-   i32.store16
-  end
-  local.get $1
-  local.set $5
-  local.get $0
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
-  i64.reinterpret_f64
-  local.set $6
-  local.get $6
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.set $7
-  local.get $6
-  i64.const 4503599627370495
-  i64.and
-  local.set $8
-  local.get $7
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 400
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 1096
-  local.get $14
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $9
-  local.get $7
-  local.get $14
-  i32.sub
-  local.set $7
-  global.get $~lib/util/number/_frc_pow
-  local.set $12
-  global.get $~lib/util/number/_exp_pow
-  local.set $15
-  local.get $9
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
-  global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
-  i64.const 1
-  i64.sub
-  local.set $25
-  global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
-  local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $26
-  global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
-  i64.const 1
-  i64.add
-  local.set $27
-  local.get $25
-  local.get $27
-  i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
-  local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
+  end
+  local.get $1
+  local.get $2
+  i32.add
+  local.set $3
+  local.get $1
   local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
+  i32.le_s
+  if (result i32)
+   local.get $3
+   i32.const 21
+   i32.le_s
+  else
+   i32.const 0
+  end
+  if
+   local.get $1
+   local.set $4
+   loop $for-loop|0
+    local.get $4
+    local.get $3
+    i32.lt_s
+    local.set $5
+    local.get $5
+    if
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.const 48
+     i32.store16
+     local.get $4
+     i32.const 1
+     i32.add
+     local.set $4
+     br $for-loop|0
+    end
+   end
+   local.get $0
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 46
+   i32.const 48
+   i32.const 16
+   i32.shl
+   i32.or
+   i32.store
+   local.get $3
+   i32.const 2
+   i32.add
+   return
+  else
+   local.get $3
+   i32.const 0
+   i32.gt_s
+   if (result i32)
+    local.get $3
+    i32.const 21
+    i32.le_s
+   else
+    i32.const 0
+   end
+   if
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    local.set $4
+    local.get $4
+    i32.const 2
+    i32.add
+    local.get $4
+    i32.const 0
+    local.get $2
+    i32.sub
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.const 46
+    i32.store16
+    local.get $1
+    i32.const 1
+    i32.add
+    return
+   else
+    i32.const -6
+    local.get $3
+    i32.lt_s
+    if (result i32)
+     local.get $3
+     i32.const 0
+     i32.le_s
+    else
+     i32.const 0
+    end
+    if
+     i32.const 2
+     local.get $3
+     i32.sub
+     local.set $4
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.add
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.shl
+     call $~lib/memory/memory.copy
+     local.get $0
+     i32.const 48
+     i32.const 46
+     i32.const 16
+     i32.shl
+     i32.or
+     i32.store
+     i32.const 2
+     local.set $5
+     loop $for-loop|1
+      local.get $5
+      local.get $4
+      i32.lt_s
+      local.set $6
+      local.get $6
+      if
+       local.get $0
+       local.get $5
+       i32.const 1
+       i32.shl
+       i32.add
+       i32.const 48
+       i32.store16
+       local.get $5
+       i32.const 1
+       i32.add
+       local.set $5
+       br $for-loop|1
+      end
+     end
+     local.get $1
+     local.get $4
+     i32.add
+     return
+    else
+     local.get $1
+     i32.const 1
+     i32.eq
+     if
+      local.get $0
+      i32.const 101
+      i32.store16 offset=2
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     else
+      local.get $1
+      i32.const 1
+      i32.shl
+      local.set $4
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $0
+      i32.const 2
+      i32.add
+      local.get $4
+      i32.const 2
+      i32.sub
+      call $~lib/memory/memory.copy
+      local.get $0
+      i32.const 46
+      i32.store16 offset=2
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 101
+      i32.store16 offset=2
+      local.get $1
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      i32.add
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     end
+     unreachable
+    end
+    unreachable
+   end
+   unreachable
+  end
+  unreachable
+ )
+ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  f64.const 0
+  f64.lt
+  local.set $2
+  local.get $2
+  if
+   local.get $1
+   f64.neg
+   local.set $1
+   local.get $0
+   i32.const 45
+   i32.store16
+  end
+  local.get $1
+  local.get $0
+  local.get $2
+  call $~lib/util/number/grisu2
+  local.set $3
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
@@ -3726,9 +3493,6 @@
  (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   i32.eqz
   if
@@ -3745,19 +3509,9 @@
   call $~lib/rt/stub/__alloc
   local.set $2
   local.get $2
-  local.set $5
   local.get $0
-  local.set $4
   local.get $1
-  local.set $3
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $5
-  local.get $4
-  local.get $3
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $2
   call $~lib/rt/stub/__retain
  )
diff --git a/tests/compiler/resolve-function-expression.optimized.wat b/tests/compiler/resolve-function-expression.optimized.wat
index d13b7b438a..fc8252e733 100644
--- a/tests/compiler/resolve-function-expression.optimized.wat
+++ b/tests/compiler/resolve-function-expression.optimized.wat
@@ -2,7 +2,7 @@
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -16,13 +16,103 @@
  (func $~setArgumentsLength (param $0 i32)
   nop
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa32 (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  i32.const 42
+  local.set $1
+  i32.const 2
+  local.set $5
+  global.get $~lib/rt/stub/offset
+  i32.const 16
+  i32.add
+  local.tee $4
+  i32.const 16
+  i32.add
+  local.tee $0
+  memory.size
+  local.tee $2
+  i32.const 16
+  i32.shl
+  local.tee $3
+  i32.gt_u
+  if
+   local.get $2
+   local.get $0
+   local.get $3
+   i32.sub
+   i32.const 65535
+   i32.add
+   i32.const -65536
+   i32.and
+   i32.const 16
+   i32.shr_u
+   local.tee $3
+   local.get $2
+   local.get $3
+   i32.gt_s
+   select
+   memory.grow
+   i32.const 0
+   i32.lt_s
+   if
+    local.get $3
+    memory.grow
+    i32.const 0
+    i32.lt_s
+    if
+     unreachable
+    end
+   end
+  end
   local.get $0
+  global.set $~lib/rt/stub/offset
+  local.get $4
   i32.const 16
   i32.sub
-  i32.load offset=12
+  local.tee $0
+  i32.const 16
+  i32.store
+  local.get $0
   i32.const 1
-  i32.shr_u
+  i32.store offset=4
+  local.get $0
+  i32.const 1
+  i32.store offset=8
+  local.get $0
+  i32.const 4
+  i32.store offset=12
+  local.get $4
+  local.set $0
+  loop $do-continue|0
+   local.get $1
+   i32.const 10
+   i32.rem_u
+   local.set $2
+   local.get $1
+   i32.const 10
+   i32.div_u
+   local.set $1
+   local.get $0
+   local.get $5
+   i32.const 1
+   i32.sub
+   local.tee $5
+   i32.const 1
+   i32.shl
+   i32.add
+   local.get $2
+   i32.const 48
+   i32.add
+   i32.store16
+   local.get $1
+   br_if $do-continue|0
+  end
+  local.get $4
  )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -73,16 +163,16 @@
    local.set $1
    local.get $2
    if
-    local.get $0
+    local.get $3
     i32.load16_u
     local.tee $2
-    local.get $3
+    local.get $0
     i32.load16_u
     local.tee $4
     i32.ne
     if
-     local.get $2
      local.get $4
+     local.get $2
      i32.sub
      return
     end
@@ -99,102 +189,15 @@
   end
   i32.const 0
  )
- (func $start:resolve-function-expression
+ (func $~start
   (local $0 i32)
   (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   i32.const 1168
   global.set $~lib/rt/stub/offset
   block $__inlined_func$~lib/string/String.__eq (result i32)
-   i32.const 42
-   local.set $2
-   i32.const 2
-   local.set $5
-   i32.const 1184
-   local.tee $1
-   i32.const 16
-   i32.add
-   local.tee $0
-   memory.size
-   local.tee $3
-   i32.const 16
-   i32.shl
-   local.tee $4
-   i32.gt_u
-   if
-    local.get $3
-    local.get $0
-    local.get $4
-    i32.sub
-    i32.const 65535
-    i32.add
-    i32.const -65536
-    i32.and
-    i32.const 16
-    i32.shr_u
-    local.tee $4
-    local.get $3
-    local.get $4
-    i32.gt_s
-    select
-    memory.grow
-    i32.const 0
-    i32.lt_s
-    if
-     local.get $4
-     memory.grow
-     i32.const 0
-     i32.lt_s
-     if
-      unreachable
-     end
-    end
-   end
-   local.get $0
-   global.set $~lib/rt/stub/offset
-   local.get $1
-   i32.const 16
-   i32.sub
-   local.tee $0
-   i32.const 16
-   i32.store
-   local.get $0
    i32.const 1
-   i32.store offset=4
-   local.get $0
-   i32.const 1
-   i32.store offset=8
-   local.get $0
-   i32.const 4
-   i32.store offset=12
-   local.get $1
-   local.set $3
-   loop $do-continue|0
-    local.get $2
-    i32.const 10
-    i32.div_u
-    local.get $3
-    local.get $5
-    i32.const 1
-    i32.sub
-    local.tee $5
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $2
-    i32.const 10
-    i32.rem_u
-    i32.const 48
-    i32.add
-    i32.store16
-    local.tee $2
-    br_if $do-continue|0
-   end
-   i32.const 1
-   local.get $1
+   call $~lib/util/number/itoa32
+   local.tee $0
    i32.const 1152
    i32.eq
    br_if $__inlined_func$~lib/string/String.__eq
@@ -202,18 +205,24 @@
    block $folding-inner0
     i32.const 0
     i32.const 1
-    local.get $1
+    local.get $0
     select
     br_if $folding-inner0
-    local.get $1
-    call $~lib/string/String#get:length
-    local.tee $2
-    i32.const 1152
-    call $~lib/string/String#get:length
+    local.get $0
+    i32.const 16
+    i32.sub
+    i32.load offset=12
+    i32.const 1
+    i32.shr_u
+    local.tee $1
+    i32.const 1148
+    i32.load
+    i32.const 1
+    i32.shr_u
     i32.ne
     br_if $folding-inner0
+    local.get $0
     local.get $1
-    local.get $2
     call $~lib/util/string/compareImpl
     i32.eqz
     br $__inlined_func$~lib/string/String.__eq
@@ -230,7 +239,4 @@
    unreachable
   end
  )
- (func $~start
-  call $start:resolve-function-expression
- )
 )
diff --git a/tests/compiler/resolve-function-expression.untouched.wat b/tests/compiler/resolve-function-expression.untouched.wat
index 3e35a909ed..888813d750 100644
--- a/tests/compiler/resolve-function-expression.untouched.wat
+++ b/tests/compiler/resolve-function-expression.untouched.wat
@@ -2,8 +2,8 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $none_=>_none (func))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -345,6 +345,16 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/rt/stub/__retain (param $0 i32) (result i32)
   local.get $0
  )
@@ -352,9 +362,6 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -384,19 +391,9 @@
   call $~lib/rt/stub/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
diff --git a/tests/compiler/resolve-propertyaccess.optimized.wat b/tests/compiler/resolve-propertyaccess.optimized.wat
index 586d530108..242fe80912 100644
--- a/tests/compiler/resolve-propertyaccess.optimized.wat
+++ b/tests/compiler/resolve-propertyaccess.optimized.wat
@@ -1,8 +1,8 @@
 (module
  (type $none_=>_none (func))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -105,116 +105,108 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/number/I32#toString (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  block $__inlined_func$~lib/util/number/itoa32
+  local.get $0
+  i32.eqz
+  if
+   i32.const 1040
+   return
+  end
+  local.get $0
+  i32.const 31
+  i32.shr_u
+  local.tee $1
+  if
+   i32.const 0
    local.get $0
-   i32.eqz
-   if
-    i32.const 1040
-    local.set $2
-    br $__inlined_func$~lib/util/number/itoa32
-   end
+   i32.sub
+   local.set $0
+  end
+  local.get $1
+  local.get $0
+  i32.const 10
+  i32.ge_u
+  i32.const 1
+  i32.add
+  local.get $0
+  i32.const 10000
+  i32.ge_u
+  i32.const 3
+  i32.add
+  local.get $0
+  i32.const 1000
+  i32.ge_u
+  i32.add
+  local.get $0
+  i32.const 100
+  i32.lt_u
+  select
+  local.get $0
+  i32.const 1000000
+  i32.ge_u
+  i32.const 6
+  i32.add
+  local.get $0
+  i32.const 1000000000
+  i32.ge_u
+  i32.const 8
+  i32.add
+  local.get $0
+  i32.const 100000000
+  i32.ge_u
+  i32.add
+  local.get $0
+  i32.const 10000000
+  i32.lt_u
+  select
+  local.get $0
+  i32.const 100000
+  i32.lt_u
+  select
+  i32.add
+  local.tee $2
+  i32.const 1
+  i32.shl
+  i32.const 1
+  call $~lib/rt/stub/__alloc
+  local.tee $3
+  local.set $4
+  loop $do-continue|0
    local.get $0
-   i32.const 31
-   i32.shr_u
-   local.tee $3
-   if
-    i32.const 0
-    local.get $0
-    i32.sub
-    local.set $0
-   end
-   local.get $3
+   i32.const 10
+   i32.rem_u
+   local.set $5
    local.get $0
    i32.const 10
-   i32.ge_u
+   i32.div_u
+   local.set $0
+   local.get $4
+   local.get $2
    i32.const 1
+   i32.sub
+   local.tee $2
+   i32.const 1
+   i32.shl
    i32.add
-   local.get $0
-   i32.const 10000
-   i32.ge_u
-   i32.const 3
-   i32.add
-   local.get $0
-   i32.const 1000
-   i32.ge_u
-   i32.add
-   local.get $0
-   i32.const 100
-   i32.lt_u
-   select
-   local.get $0
-   i32.const 1000000
-   i32.ge_u
-   i32.const 6
-   i32.add
-   local.get $0
-   i32.const 1000000000
-   i32.ge_u
-   i32.const 8
-   i32.add
-   local.get $0
-   i32.const 100000000
-   i32.ge_u
+   local.get $5
+   i32.const 48
    i32.add
+   i32.store16
    local.get $0
-   i32.const 10000000
-   i32.lt_u
-   select
-   local.get $0
-   i32.const 100000
-   i32.lt_u
-   select
-   i32.add
-   local.tee $4
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/stub/__alloc
-   local.tee $2
-   local.set $5
-   loop $do-continue|0
-    local.get $0
-    i32.const 10
-    i32.div_u
-    local.get $5
-    local.get $4
-    i32.const 1
-    i32.sub
-    local.tee $4
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $0
-    i32.const 10
-    i32.rem_u
-    i32.const 48
-    i32.add
-    i32.store16
-    local.tee $0
-    br_if $do-continue|0
-   end
+   br_if $do-continue|0
+  end
+  local.get $1
+  if
    local.get $3
-   if
-    local.get $2
-    i32.const 45
-    i32.store16
-   end
+   i32.const 45
+   i32.store16
   end
-  local.get $2
- )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
+  local.get $3
  )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -309,10 +301,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -329,7 +329,7 @@
   i32.const 1456
   global.set $~lib/rt/stub/offset
   i32.const 1
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1072
   call $~lib/string/String.__eq
   i32.eqz
@@ -342,7 +342,7 @@
    unreachable
   end
   i32.const 11
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1184
   call $~lib/string/String.__eq
   i32.eqz
@@ -355,7 +355,7 @@
    unreachable
   end
   i32.const 2
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1216
   call $~lib/string/String.__eq
   i32.eqz
@@ -368,7 +368,7 @@
    unreachable
   end
   i32.const 22
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1248
   call $~lib/string/String.__eq
   i32.eqz
@@ -381,7 +381,7 @@
    unreachable
   end
   i32.const 3
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1280
   call $~lib/string/String.__eq
   i32.eqz
@@ -394,7 +394,7 @@
    unreachable
   end
   i32.const 33
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1312
   call $~lib/string/String.__eq
   i32.eqz
@@ -407,7 +407,7 @@
    unreachable
   end
   i32.const 4
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1344
   call $~lib/string/String.__eq
   i32.eqz
@@ -420,7 +420,7 @@
    unreachable
   end
   i32.const 5
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1376
   call $~lib/string/String.__eq
   i32.eqz
@@ -433,7 +433,7 @@
    unreachable
   end
   i32.const 55
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1408
   call $~lib/string/String.__eq
   i32.eqz
@@ -453,7 +453,7 @@
   i32.store
   local.get $0
   i32.load
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1440
   call $~lib/string/String.__eq
   i32.eqz
diff --git a/tests/compiler/resolve-propertyaccess.untouched.wat b/tests/compiler/resolve-propertyaccess.untouched.wat
index 3dcedd8795..0a9e73c794 100644
--- a/tests/compiler/resolve-propertyaccess.untouched.wat
+++ b/tests/compiler/resolve-propertyaccess.untouched.wat
@@ -2,8 +2,8 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -341,6 +341,16 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/rt/stub/__retain (param $0 i32) (result i32)
   local.get $0
  )
@@ -348,9 +358,6 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -380,19 +387,9 @@
   call $~lib/rt/stub/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
diff --git a/tests/compiler/resolve-ternary.optimized.wat b/tests/compiler/resolve-ternary.optimized.wat
index 45b4ecfee3..0f374852f0 100644
--- a/tests/compiler/resolve-ternary.optimized.wat
+++ b/tests/compiler/resolve-ternary.optimized.wat
@@ -1,14 +1,16 @@
 (module
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $none_=>_none (func))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
- (type $i32_i64_i32_i64_i32_i64_=>_i32 (func (param i32 i64 i32 i64 i32 i64) (result i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
+ (type $i32_i64_i64_i32_i64_=>_i32 (func (param i32 i64 i64 i32 i64) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
@@ -29,6 +31,9 @@
  (data (i32.const 2416) "\03\00\00\00 \00\00\00\00\00\00\00 \00\00\00\00\00\00\00 ")
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0))
+ (global $~lib/util/number/_frc_plus (mut i64) (i64.const 0))
+ (global $~lib/util/number/_frc_minus (mut i64) (i64.const 0))
+ (global $~lib/util/number/_exp (mut i32) (i32.const 0))
  (global $~lib/util/number/_K (mut i32) (i32.const 0))
  (global $~lib/util/number/_frc_pow (mut i64) (i64.const 0))
  (global $~lib/util/number/_exp_pow (mut i32) (i32.const 0))
@@ -41,6 +46,31 @@
  (export "__collect" (func $~lib/rt/pure/__collect))
  (export "__rtti_base" (global $~lib/rt/__rtti_base))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -55,7 +85,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -77,7 +107,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -96,23 +126,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -120,61 +150,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -182,9 +204,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -193,7 +213,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -216,7 +236,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -230,7 +250,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -243,9 +263,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -254,7 +274,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -263,7 +283,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -281,9 +301,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -303,7 +323,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -336,8 +356,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -358,27 +378,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -407,13 +427,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -421,21 +441,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -450,31 +464,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -504,7 +515,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -521,7 +532,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -549,7 +560,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -601,7 +612,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -622,7 +633,8 @@
     unreachable
    end
    i32.const 2448
-   local.tee $0
+   local.set $2
+   i32.const 2448
    i32.const 0
    i32.store
    i32.const 4016
@@ -641,27 +653,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 2448
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -681,10 +687,11 @@
    i32.const 2448
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -694,23 +701,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -739,7 +745,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -757,16 +763,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -787,26 +787,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -824,7 +820,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -869,13 +865,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -895,7 +892,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -906,7 +903,7 @@
   if
    i32.const 1088
    i32.const 1040
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1006,7 +1003,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1022,7 +1019,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1155,7 +1152,7 @@
   i32.lt_u
   select
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -1182,14 +1179,6 @@
    br_if $do-continue|0
   end
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -1283,10 +1272,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -1298,42 +1295,144 @@
   end
   i32.const 0
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (result i32)
-  (local $6 i32)
-  (local $7 i64)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  local.get $3
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
   local.get $1
-  i64.sub
-  local.set $9
-  local.get $3
-  i64.const 1
-  i32.const 0
-  local.get $4
-  i32.sub
-  local.tee $10
-  i64.extend_i32_s
-  i64.shl
-  local.tee $11
-  i64.const 1
-  i64.sub
-  local.tee $12
+  i64.const 4294967295
   i64.and
-  local.set $7
+  local.tee $2
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
   local.get $3
-  local.get $10
-  i64.extend_i32_s
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (result i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i64)
+  (local $10 i64)
+  (local $11 i64)
+  (local $12 i64)
+  local.get $2
+  local.get $1
+  i64.sub
+  local.set $9
+  local.get $2
+  i64.const 1
+  i32.const 0
+  local.get $3
+  i32.sub
+  local.tee $8
+  i64.extend_i32_s
+  i64.shl
+  local.tee $10
+  i64.const 1
+  i64.sub
+  local.tee $11
+  i64.and
+  local.set $1
+  local.get $2
+  local.get $8
+  i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $6
+  local.tee $5
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $7
   loop $while-continue|0
-   local.get $4
+   local.get $7
    i32.const 0
    i32.gt_s
    if
@@ -1348,281 +1447,236 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
+               local.get $7
                i32.const 10
                i32.ne
                if
-                local.get $4
+                local.get $7
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $6
+               local.get $5
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $6
+               local.set $3
+               local.get $5
                i32.const 1000000000
                i32.rem_u
-               local.set $6
+               local.set $5
                br $break|1
               end
-              local.get $6
+              local.get $5
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $6
+              local.set $3
+              local.get $5
               i32.const 100000000
               i32.rem_u
-              local.set $6
+              local.set $5
               br $break|1
              end
-             local.get $6
+             local.get $5
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $6
+             local.set $3
+             local.get $5
              i32.const 10000000
              i32.rem_u
-             local.set $6
+             local.set $5
              br $break|1
             end
-            local.get $6
+            local.get $5
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $6
+            local.set $3
+            local.get $5
             i32.const 1000000
             i32.rem_u
-            local.set $6
+            local.set $5
             br $break|1
            end
-           local.get $6
+           local.get $5
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $6
+           local.set $3
+           local.get $5
            i32.const 100000
            i32.rem_u
-           local.set $6
+           local.set $5
            br $break|1
           end
-          local.get $6
+          local.get $5
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $6
+          local.set $3
+          local.get $5
           i32.const 10000
           i32.rem_u
-          local.set $6
+          local.set $5
           br $break|1
          end
-         local.get $6
+         local.get $5
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $6
+         local.set $3
+         local.get $5
          i32.const 1000
          i32.rem_u
-         local.set $6
+         local.set $5
          br $break|1
         end
-        local.get $6
+        local.get $5
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $6
+        local.set $3
+        local.get $5
         i32.const 100
         i32.rem_u
-        local.set $6
+        local.set $5
         br $break|1
        end
-       local.get $6
+       local.get $5
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $6
+       local.set $3
+       local.get $5
        i32.const 10
        i32.rem_u
-       local.set $6
+       local.set $5
        br $break|1
       end
-      local.get $6
-      local.set $2
+      local.get $5
+      local.set $3
       i32.const 0
-      local.set $6
+      local.set $5
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $8
+    local.get $3
+    local.get $6
     i32.or
     if
      local.get $0
-     local.get $8
+     local.get $6
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $8
+     local.get $6
      i32.const 1
      i32.add
-     local.set $8
+     local.set $6
     end
-    local.get $4
+    local.get $7
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $7
-    local.get $6
+    local.set $7
+    local.get $1
+    local.get $5
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $7
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $6
      local.get $4
+     local.get $2
+     local.get $7
      i32.const 2
      i32.shl
      i32.const 2328
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $8
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $0
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.tee $7
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $7
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $0
-     local.get $4
-     i32.store16
-     local.get $8
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $6
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $1
-  loop $while-continue|4
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $7
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $1
+   local.tee $1
+   local.get $2
    i64.shr_u
-   local.tee $7
-   local.get $8
+   local.tee $12
+   local.get $6
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $8
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
     i32.store16
-    local.get $8
+    local.get $6
     i32.const 1
     i32.add
-    local.set $8
+    local.set $6
    end
-   local.get $4
+   local.get $7
    i32.const 1
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $12
+   local.set $7
+   local.get $1
+   local.get $11
    i64.and
-   local.tee $7
-   local.get $5
+   local.tee $1
+   local.get $4
    i64.ge_u
-   br_if $while-continue|4
+   br_if $while-continue|2
   end
-  local.get $4
+  local.get $7
   global.get $~lib/util/number/_K
   i32.add
   global.set $~lib/util/number/_K
-  local.get $7
-  local.set $1
+  local.get $0
+  local.get $6
+  local.get $4
+  local.get $1
+  local.get $10
   local.get $9
   i32.const 0
-  local.get $4
+  local.get $7
   i32.sub
   i32.const 2
   i32.shl
@@ -1630,234 +1684,211 @@
   i32.add
   i64.load32_u
   i64.mul
-  local.set $3
-  local.get $0
-  local.get $8
-  i32.const 1
-  i32.sub
-  i32.const 1
-  i32.shl
-  i32.add
-  local.tee $0
-  i32.load16_u
-  local.set $4
-  loop $while-continue|6
-   i32.const 1
-   local.get $3
-   local.get $1
-   i64.sub
-   local.get $1
-   local.get $11
-   i64.add
-   local.tee $7
-   local.get $3
-   i64.sub
-   i64.gt_u
-   local.get $7
-   local.get $3
-   i64.lt_u
-   select
-   i32.const 0
-   local.get $5
-   local.get $1
-   i64.sub
-   local.get $11
-   i64.ge_u
-   i32.const 0
-   local.get $1
-   local.get $3
-   i64.lt_u
-   select
-   select
-   if
-    local.get $4
-    i32.const 1
-    i32.sub
-    local.set $4
-    local.get $1
-    local.get $11
-    i64.add
-    local.set $1
-    br $while-continue|6
-   end
-  end
-  local.get $0
-  local.get $4
-  i32.store16
-  local.get $8
+  call $~lib/util/number/grisuRound
+  local.get $6
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
+  end
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
   end
+  local.get $1
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $1
  )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -1943,7 +1974,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $0
     i32.const 46
     i32.store16
@@ -1972,7 +2003,7 @@
      local.get $1
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $0
      i32.const 3014704
      i32.store
@@ -2009,36 +2040,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $1
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       i32.const 2
       i32.add
      else
@@ -2054,7 +2061,7 @@
       local.tee $2
       i32.const 2
       i32.sub
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $0
       i32.const 46
       i32.store16 offset=2
@@ -2065,36 +2072,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $2
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       local.get $1
       i32.add
       i32.const 2
@@ -2104,131 +2087,17 @@
    end
   end
  )
- (func $~lib/util/number/dtoa_core (param $0 i32) (result i32)
-  (local $1 i64)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 f64)
-  i32.const -4
-  global.set $~lib/util/number/_K
-  i32.const 1808
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 2240
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $0
-  local.get $0
-  global.get $~lib/util/number/_frc_pow
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $3
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  i64.const 2147483648
-  i64.mul
-  i64.const 0
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.const 0
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $0
-  i32.const 1
-  i32.add
-  local.get $3
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 2147483648
-  i64.mul
-  local.get $2
-  i64.const 1024
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $3
-  i64.const 1024
-  i64.mul
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $1
-  local.get $0
-  i32.const 1
-  i32.add
-  local.get $1
-  local.get $3
-  i64.const 2147483647
-  i64.mul
-  local.get $2
-  i64.const 2147483647
-  i64.mul
-  local.get $2
-  i64.const 4294966784
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $1
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $3
-  i64.const 4294966784
-  i64.mul
-  local.get $1
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  call $~lib/util/number/genDigits
-  global.get $~lib/util/number/_K
-  call $~lib/util/number/prettify
- )
  (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   i32.const 0
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $2
   i32.const 0
   local.get $2
@@ -2284,15 +2153,18 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $3
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   local.get $1
   i32.add
   local.get $3
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $2
   call $~lib/rt/pure/__retain
  )
@@ -2307,29 +2179,143 @@
   local.get $1
   call $~lib/rt/tlsf/insertBlock
  )
+ (func $~lib/util/number/dtoa (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 56
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  i64.const -9223372036854774784
+  global.set $~lib/util/number/_frc_plus
+  i64.const 9223372036854775296
+  global.set $~lib/util/number/_frc_minus
+  i32.const -63
+  global.set $~lib/util/number/_exp
+  i32.const -4
+  global.set $~lib/util/number/_K
+  i32.const 1808
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 2240
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $1
+  local.get $0
+  local.get $0
+  i64.const -9223372036854775808
+  global.get $~lib/util/number/_frc_pow
+  local.tee $3
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $3
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $4
+  local.get $1
+  global.get $~lib/util/number/_exp
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $4
+  global.get $~lib/util/number/_frc_minus
+  local.get $3
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  call $~lib/util/number/genDigits
+  global.get $~lib/util/number/_K
+  call $~lib/util/number/prettify
+  local.tee $1
+  local.set $2
+  local.get $1
+  i32.const 28
+  i32.eq
+  if
+   local.get $0
+   call $~lib/rt/pure/__retain
+   return
+  end
+  local.get $0
+  local.get $2
+  call $~lib/string/String#substring
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
+  i32.const 16
+  i32.sub
+  local.set $1
+  local.get $0
+  i32.const 15
+  i32.and
+  i32.eqz
+  i32.const 0
+  local.get $0
+  select
+  if (result i32)
+   local.get $1
+   i32.load
+   i32.const 1
+   i32.and
+   i32.eqz
+  else
+   i32.const 0
+  end
+  if (result i32)
+   local.get $1
+   i32.load offset=4
+   i32.const -268435456
+   i32.and
+   i32.eqz
+  else
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 573
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  call $~lib/rt/tlsf/freeBlock
+ )
  (func $~setArgumentsLength (param $0 i32)
   nop
  )
- (func $start:resolve-ternary
+ (func $~start
   (local $0 i32)
   (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
   i32.const 1
   call $~lib/util/number/decimalCount32
-  local.tee $0
+  local.tee $1
   i32.const 1
   i32.shl
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
   i32.const 1
-  local.get $0
-  call $~lib/util/number/utoa_simple<u32>
   local.get $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
   call $~lib/rt/pure/__retain
-  local.tee $3
+  local.tee $1
   i32.const 1232
   call $~lib/string/String.__eq
   i32.eqz
@@ -2341,68 +2327,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  block $__inlined_func$~lib/util/number/dtoa
-   i32.const 56
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.tee $0
-   call $~lib/util/number/dtoa_core
-   local.tee $1
-   i32.const 28
-   i32.eq
-   if
-    local.get $0
-    call $~lib/rt/pure/__retain
-    local.set $1
-    br $__inlined_func$~lib/util/number/dtoa
-   end
-   local.get $0
-   local.get $1
-   call $~lib/string/String#substring
-   local.set $1
-   call $~lib/rt/tlsf/maybeInitialize
-   local.get $0
-   i32.const 16
-   i32.sub
-   local.set $2
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-   i32.const 0
-   local.get $0
-   select
-   if (result i32)
-    local.get $2
-    i32.load
-    i32.const 1
-    i32.and
-    i32.eqz
-   else
-    i32.const 0
-   end
-   if (result i32)
-    local.get $2
-    i32.load offset=4
-    i32.const -268435456
-    i32.and
-    i32.eqz
-   else
-    i32.const 0
-   end
-   i32.eqz
-   if
-    i32.const 0
-    i32.const 1040
-    i32.const 581
-    i32.const 3
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $2
-   call $~lib/rt/tlsf/freeBlock
-  end
-  local.get $1
+  call $~lib/util/number/dtoa
+  local.tee $0
   i32.const 2400
   call $~lib/string/String.__eq
   i32.eqz
@@ -2414,13 +2340,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/pure/__release
- )
- (func $~start
-  call $start:resolve-ternary
+  i32.const 2444
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 2444
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/rt/pure/__collect
   nop
diff --git a/tests/compiler/resolve-ternary.untouched.wat b/tests/compiler/resolve-ternary.untouched.wat
index 4cc9ba29ab..620343f366 100644
--- a/tests/compiler/resolve-ternary.untouched.wat
+++ b/tests/compiler/resolve-ternary.untouched.wat
@@ -1,18 +1,22 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_none (func (param i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
  (type $f64_i32_=>_i32 (func (param f64 i32) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 16) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s\00")
@@ -59,6 +63,69 @@
  (export "__collect" (func $~lib/rt/pure/__collect))
  (export "__rtti_base" (global $~lib/rt/__rtti_base))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -67,9 +134,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -82,7 +146,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -109,7 +173,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -163,7 +227,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -188,77 +252,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -275,6 +297,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -286,8 +314,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -295,7 +321,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -312,28 +338,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -344,44 +360,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -389,30 +395,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -431,22 +433,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -472,7 +474,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -484,18 +486,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -549,27 +551,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -584,24 +574,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -611,31 +587,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -643,8 +603,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -670,24 +628,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -695,7 +651,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -703,16 +659,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -728,7 +684,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -737,8 +693,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -749,49 +705,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -804,10 +756,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -857,73 +805,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -936,11 +857,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -960,7 +881,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -986,9 +907,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1056,31 +974,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1093,79 +1004,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1202,9 +1082,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1218,12 +1096,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1233,7 +1111,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1270,7 +1148,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1321,29 +1199,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1363,7 +1221,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1410,7 +1268,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1431,7 +1289,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1452,7 +1310,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1754,13 +1612,20 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -1790,19 +1655,9 @@
   call $~lib/rt/tlsf/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
@@ -2037,57 +1892,291 @@
   call $~lib/rt/pure/__release
   local.get $2
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i64)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 i32)
-  (local $17 i32)
-  (local $18 i32)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
-  i32.const 0
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
   local.get $4
   i32.sub
-  local.set $7
-  i64.const 1
-  local.get $7
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
   i64.extend_i32_s
   i64.shl
-  local.set $8
-  local.get $8
   i64.const 1
   i64.sub
-  local.set $9
-  local.get $3
   local.get $1
-  i64.sub
-  local.set $10
-  local.get $4
-  local.set $11
+  local.get $5
+  i32.sub
   local.get $3
-  local.get $7
+  i32.sub
   i64.extend_i32_s
-  i64.shr_u
-  i32.wrap_i64
-  local.set $12
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
   local.get $3
-  local.get $9
-  i64.and
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
+  local.get $1
+  f64.ne
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 848
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 1544
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $3
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
+    i64.sub
+    local.get $4
+    i64.ge_u
+   else
+    i32.const 0
+   end
+   if (result i32)
+    local.get $3
+    local.get $4
+    i64.add
+    local.get $5
+    i64.lt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
+     local.get $4
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
+    end
+   else
+    i32.const 0
+   end
+   local.set $8
+   local.get $8
+   if
+    local.get $7
+    i32.const 1
+    i32.sub
+    local.set $7
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $6
+  local.get $7
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i64)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i32)
+  (local $13 i64)
+  (local $14 i32)
+  (local $15 i32)
+  (local $16 i32)
+  (local $17 i32)
+  (local $18 i32)
+  (local $19 i64)
+  (local $20 i64)
+  i32.const 0
+  local.get $4
+  i32.sub
+  local.set $7
+  i64.const 1
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $8
+  local.get $8
+  i64.const 1
+  i64.sub
+  local.set $9
+  local.get $3
+  local.get $1
+  i64.sub
+  local.set $10
+  local.get $4
+  local.set $11
+  local.get $3
+  local.get $7
+  i64.extend_i32_s
+  i64.shr_u
+  i32.wrap_i64
+  local.set $12
+  local.get $3
+  local.get $9
+  i64.and
   local.set $13
   local.get $12
   call $~lib/util/number/decimalCount32
@@ -2299,13 +2388,9 @@
      i32.add
      global.set $~lib/util/number/_K
      local.get $0
-     local.set $24
      local.get $15
-     local.set $18
      local.get $5
-     local.set $23
      local.get $19
-     local.set $22
      i32.const 1720
      local.get $14
      i32.const 2
@@ -2315,79 +2400,15 @@
      local.get $7
      i64.extend_i32_s
      i64.shl
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  loop $while-continue|2
    i32.const 1
    local.set $16
    local.get $16
@@ -2404,8 +2425,8 @@
     local.get $7
     i64.extend_i32_s
     i64.shr_u
-    local.set $23
-    local.get $23
+    local.set $20
+    local.get $20
     local.get $15
     i64.extend_i32_s
     i64.or
@@ -2414,16 +2435,16 @@
     if
      local.get $0
      local.get $15
-     local.tee $26
+     local.tee $18
      i32.const 1
      i32.add
      local.set $15
-     local.get $26
+     local.get $18
      i32.const 1
      i32.shl
      i32.add
      i32.const 48
-     local.get $23
+     local.get $20
      i32.wrap_i64
      i32.const 65535
      i32.and
@@ -2458,92 +2479,129 @@
      i64.mul
      local.set $10
      local.get $0
-     local.set $18
      local.get $15
-     local.set $27
      local.get $5
-     local.set $28
      local.get $13
-     local.set $22
      local.get $8
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
-    br $while-continue|4
+    br $while-continue|2
    end
   end
   unreachable
  )
- (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
   (local $4 i32)
-  (local $5 i32)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $3
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $3
+  i64.const 4503599627370495
+  i64.and
+  local.set $5
+  local.get $4
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
+  i32.const 1
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
+  i32.add
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
+  i64.clz
+  i32.wrap_i64
+  local.set $7
+  local.get $6
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $6
+  local.get $4
+  local.get $7
+  i32.sub
+  local.set $4
+  global.get $~lib/util/number/_frc_pow
+  local.set $8
+  global.get $~lib/util/number/_exp_pow
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $11
+  global.get $~lib/util/number/_frc_plus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.set $12
+  global.get $~lib/util/number/_exp
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $13
+  global.get $~lib/util/number/_frc_minus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  local.set $14
+  local.get $12
+  local.get $14
+  i64.sub
+  local.set $15
+  local.get $1
+  local.get $10
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
   (local $6 i32)
   loop $while-continue|0
    local.get $2
@@ -3564,248 +3622,269 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
+  end
+ )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.set $2
+  local.get $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
   end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
  )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $2
   i32.eqz
   if
@@ -3988,48 +4067,10 @@
       local.get $0
       i32.const 4
       i32.add
-      local.set $5
       local.get $3
       i32.const 1
       i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $7
+      call $~lib/util/number/genExponent
       local.set $1
       local.get $1
       i32.const 2
@@ -4039,14 +4080,14 @@
       local.get $1
       i32.const 1
       i32.shl
-      local.set $7
+      local.set $4
       local.get $0
       i32.const 4
       i32.add
       local.get $0
       i32.const 2
       i32.add
-      local.get $7
+      local.get $4
       i32.const 2
       i32.sub
       call $~lib/memory/memory.copy
@@ -4054,58 +4095,20 @@
       i32.const 46
       i32.store16 offset=2
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 101
       i32.store16 offset=2
       local.get $1
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 4
       i32.add
-      local.set $9
       local.get $3
       i32.const 1
       i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
+      call $~lib/util/number/genExponent
       i32.add
       local.set $1
       local.get $1
@@ -4124,31 +4127,6 @@
  (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
   local.get $1
   f64.const 0
   f64.lt
@@ -4163,387 +4141,22 @@
    i32.store16
   end
   local.get $1
-  local.set $5
   local.get $0
-  local.set $4
   local.get $2
+  call $~lib/util/number/grisu2
   local.set $3
-  local.get $5
-  i64.reinterpret_f64
-  local.set $6
-  local.get $6
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.set $7
-  local.get $6
-  i64.const 4503599627370495
-  i64.and
-  local.set $8
-  local.get $7
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 848
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 1544
-  local.get $14
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $9
-  local.get $7
-  local.get $14
-  i32.sub
-  local.set $7
-  global.get $~lib/util/number/_frc_pow
-  local.set $12
-  global.get $~lib/util/number/_exp_pow
-  local.set $15
-  local.get $9
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
-  global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
-  i64.const 1
-  i64.sub
-  local.set $25
-  global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
-  local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $26
-  global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
-  i64.const 1
-  i64.add
-  local.set $27
-  local.get $25
-  local.get $27
-  i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
-  local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
-  local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
@@ -4695,7 +4308,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/resolve-unary.optimized.wat b/tests/compiler/resolve-unary.optimized.wat
index 6d400f4597..7ab4064246 100644
--- a/tests/compiler/resolve-unary.optimized.wat
+++ b/tests/compiler/resolve-unary.optimized.wat
@@ -1,8 +1,8 @@
 (module
  (type $none_=>_none (func))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -112,116 +112,108 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/number/I32#toString (param $0 i32) (result i32)
+ (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  block $__inlined_func$~lib/util/number/itoa32
+  local.get $0
+  i32.eqz
+  if
+   i32.const 1040
+   return
+  end
+  local.get $0
+  i32.const 31
+  i32.shr_u
+  local.tee $1
+  if
+   i32.const 0
    local.get $0
-   i32.eqz
-   if
-    i32.const 1040
-    local.set $2
-    br $__inlined_func$~lib/util/number/itoa32
-   end
+   i32.sub
+   local.set $0
+  end
+  local.get $1
+  local.get $0
+  i32.const 10
+  i32.ge_u
+  i32.const 1
+  i32.add
+  local.get $0
+  i32.const 10000
+  i32.ge_u
+  i32.const 3
+  i32.add
+  local.get $0
+  i32.const 1000
+  i32.ge_u
+  i32.add
+  local.get $0
+  i32.const 100
+  i32.lt_u
+  select
+  local.get $0
+  i32.const 1000000
+  i32.ge_u
+  i32.const 6
+  i32.add
+  local.get $0
+  i32.const 1000000000
+  i32.ge_u
+  i32.const 8
+  i32.add
+  local.get $0
+  i32.const 100000000
+  i32.ge_u
+  i32.add
+  local.get $0
+  i32.const 10000000
+  i32.lt_u
+  select
+  local.get $0
+  i32.const 100000
+  i32.lt_u
+  select
+  i32.add
+  local.tee $2
+  i32.const 1
+  i32.shl
+  i32.const 1
+  call $~lib/rt/stub/__alloc
+  local.tee $3
+  local.set $4
+  loop $do-continue|0
    local.get $0
-   i32.const 31
-   i32.shr_u
-   local.tee $3
-   if
-    i32.const 0
-    local.get $0
-    i32.sub
-    local.set $0
-   end
-   local.get $3
+   i32.const 10
+   i32.rem_u
+   local.set $5
    local.get $0
    i32.const 10
-   i32.ge_u
+   i32.div_u
+   local.set $0
+   local.get $4
+   local.get $2
    i32.const 1
+   i32.sub
+   local.tee $2
+   i32.const 1
+   i32.shl
    i32.add
-   local.get $0
-   i32.const 10000
-   i32.ge_u
-   i32.const 3
-   i32.add
-   local.get $0
-   i32.const 1000
-   i32.ge_u
-   i32.add
-   local.get $0
-   i32.const 100
-   i32.lt_u
-   select
-   local.get $0
-   i32.const 1000000
-   i32.ge_u
-   i32.const 6
-   i32.add
-   local.get $0
-   i32.const 1000000000
-   i32.ge_u
-   i32.const 8
-   i32.add
-   local.get $0
-   i32.const 100000000
-   i32.ge_u
+   local.get $5
+   i32.const 48
    i32.add
+   i32.store16
    local.get $0
-   i32.const 10000000
-   i32.lt_u
-   select
-   local.get $0
-   i32.const 100000
-   i32.lt_u
-   select
-   i32.add
-   local.tee $4
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/stub/__alloc
-   local.tee $2
-   local.set $5
-   loop $do-continue|0
-    local.get $0
-    i32.const 10
-    i32.div_u
-    local.get $5
-    local.get $4
-    i32.const 1
-    i32.sub
-    local.tee $4
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $0
-    i32.const 10
-    i32.rem_u
-    i32.const 48
-    i32.add
-    i32.store16
-    local.tee $0
-    br_if $do-continue|0
-   end
+   br_if $do-continue|0
+  end
+  local.get $1
+  if
    local.get $3
-   if
-    local.get $2
-    i32.const 45
-    i32.store16
-   end
+   i32.const 45
+   i32.store16
   end
-  local.get $2
- )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
+  local.get $3
  )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -316,10 +308,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -336,7 +336,7 @@
   i32.const 1552
   global.set $~lib/rt/stub/offset
   i32.const -1
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1072
   call $~lib/string/String.__eq
   i32.eqz
@@ -349,7 +349,7 @@
    unreachable
   end
   i32.const 1
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1152
   call $~lib/string/String.__eq
   i32.eqz
@@ -366,7 +366,7 @@
   i32.add
   global.set $resolve-unary/a
   global.get $resolve-unary/a
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1184
   call $~lib/string/String.__eq
   i32.eqz
@@ -383,7 +383,7 @@
   i32.sub
   global.set $resolve-unary/a
   global.get $resolve-unary/a
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1152
   call $~lib/string/String.__eq
   i32.eqz
@@ -428,7 +428,7 @@
   global.get $resolve-unary/a
   i32.const -1
   i32.xor
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1280
   call $~lib/string/String.__eq
   i32.eqz
@@ -446,7 +446,7 @@
   i32.add
   global.set $resolve-unary/b
   local.get $0
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1152
   call $~lib/string/String.__eq
   i32.eqz
@@ -464,7 +464,7 @@
   i32.sub
   global.set $resolve-unary/b
   local.get $0
-  call $~lib/number/I32#toString
+  call $~lib/util/number/itoa32
   i32.const 1184
   call $~lib/string/String.__eq
   i32.eqz
diff --git a/tests/compiler/resolve-unary.untouched.wat b/tests/compiler/resolve-unary.untouched.wat
index 4aa886e204..b3fcdb5245 100644
--- a/tests/compiler/resolve-unary.untouched.wat
+++ b/tests/compiler/resolve-unary.untouched.wat
@@ -2,8 +2,8 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -340,6 +340,16 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/rt/stub/__retain (param $0 i32) (result i32)
   local.get $0
  )
@@ -347,9 +357,6 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -379,19 +386,9 @@
   call $~lib/rt/stub/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
diff --git a/tests/compiler/retain-release-sanity.optimized.wat b/tests/compiler/retain-release-sanity.optimized.wat
index aaed61f712..9229d9d07f 100644
--- a/tests/compiler/retain-release-sanity.optimized.wat
+++ b/tests/compiler/retain-release-sanity.optimized.wat
@@ -1,12 +1,12 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
@@ -36,6 +36,31 @@
  (global $~lib/rt/pure/END (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -50,7 +75,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -72,7 +97,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -91,23 +116,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -115,61 +140,53 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -177,9 +194,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -188,7 +203,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -211,7 +226,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -225,7 +240,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -238,9 +253,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -249,7 +264,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -258,7 +273,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -276,9 +291,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -298,7 +313,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -331,8 +346,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -353,27 +368,27 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1136
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -402,13 +417,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -416,21 +431,15 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -445,31 +454,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -499,7 +505,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -516,7 +522,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -544,7 +550,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -596,7 +602,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -617,7 +623,8 @@
     unreachable
    end
    i32.const 1664
-   local.tee $0
+   local.set $2
+   i32.const 1664
    i32.const 0
    i32.store
    i32.const 3232
@@ -636,27 +643,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1664
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -676,7 +677,7 @@
    i32.const 1664
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -685,7 +686,7 @@
   if
    i32.const 1184
    i32.const 1136
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -704,6 +705,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -713,23 +715,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -758,7 +759,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -776,16 +777,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -806,26 +801,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1136
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -843,7 +834,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -888,13 +879,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -914,7 +906,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1006,7 +998,7 @@
     if
      i32.const 0
      i32.const 1136
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1022,7 +1014,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1047,169 +1039,171 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
   local.get $0
   local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
   i32.add
- )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -1264,17 +1258,6 @@
   end
   local.get $0
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1652
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
@@ -1310,184 +1293,186 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
-     end
-     loop $while-continue|1
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $3
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $3
       local.get $4
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
+     end
+    end
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
       i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
-      end
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|2
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
       local.get $0
-      local.tee $2
+      local.get $2
       i32.const 1
+      i32.sub
+      local.tee $2
       i32.add
-      local.set $0
       local.get $1
-      local.tee $3
-      i32.const 1
-      i32.add
-      local.set $1
       local.get $2
-      local.get $3
+      i32.add
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|3
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
-      i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.get $2
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
-     end
-    end
-    loop $while-continue|5
-     local.get $4
-     if
-      local.get $4
-      i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
@@ -1536,7 +1521,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -1559,10 +1546,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -1592,7 +1579,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 1652
   i32.ge_u
@@ -1648,7 +1635,7 @@
    local.get $4
    local.get $2
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
    local.get $1
    local.get $3
    i32.ne
@@ -1688,76 +1675,93 @@
   local.get $2
   i32.store offset=12
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
- (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $__inlined_func$~lib/string/String#concat (result i32)
-   local.get $0
-   i32.const 1424
-   local.get $0
-   select
-   local.set $2
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.tee $1
+  i32.eqz
+  if
    local.get $1
-   call $~lib/rt/pure/__retain
-   local.tee $0
-   i32.eqz
+   i32.const 1424
+   i32.ne
    if
-    local.get $0
-    i32.const 1424
-    i32.ne
+    local.get $1
+    i32.const 1652
+    i32.gt_u
     if
-     local.get $0
-     call $~lib/rt/pure/__release
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
     end
-    i32.const 1424
-    local.set $0
    end
-   local.get $2
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $3
-   local.get $0
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $4
-   i32.add
-   local.tee $1
-   i32.eqz
+   i32.const 1424
+   local.set $1
+  end
+  local.get $1
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $4
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $2
+  i32.add
+  local.tee $3
+  i32.eqz
+  if
+   local.get $1
+   i32.const 1652
+   i32.gt_u
    if
-    local.get $0
-    call $~lib/rt/pure/__release
-    i32.const 1344
-    br $__inlined_func$~lib/string/String#concat
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
    end
+   i32.const 1344
+   return
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  local.get $0
+  local.get $2
+  call $~lib/util/memory/memmove
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $1
+  local.get $4
+  call $~lib/util/memory/memmove
+  local.get $1
+  i32.const 1652
+  i32.gt_u
+  if
    local.get $1
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.tee $1
-   local.get $2
-   local.get $3
-   call $~lib/memory/memory.copy
-   local.get $1
-   local.get $3
-   i32.add
-   local.get $0
-   local.get $4
-   call $~lib/memory/memory.copy
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
+  local.get $3
  )
  (func $start:retain-release-sanity
   (local $0 i32)
@@ -1766,15 +1770,21 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
   i32.const 12
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
@@ -1788,24 +1798,32 @@
   local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.tee $0
+  local.get $0
+  local.set $1
+  local.get $0
   local.get $3
   i32.load
   local.tee $4
   i32.ne
   if
-   local.get $0
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $0
+   local.set $1
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $3
-  local.get $0
+  local.get $1
   i32.store
   local.get $3
-  local.get $2
+  local.get $0
   i32.store offset=4
   local.get $3
   i32.const 12
@@ -1819,7 +1837,7 @@
   call $~lib/array/Array<i32>#push
   local.get $3
   i32.load offset=12
-  local.tee $2
+  local.tee $0
   i32.const 1
   i32.lt_s
   if
@@ -1832,29 +1850,42 @@
   end
   local.get $3
   i32.load offset=4
-  local.get $2
+  local.get $0
   i32.const 1
   i32.sub
-  local.tee $2
+  local.tee $0
   i32.const 2
   i32.shl
   i32.add
   i32.load
   drop
   local.get $3
-  local.get $2
+  local.get $0
   i32.store offset=12
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1652
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
   i32.const 0
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
@@ -1868,24 +1899,32 @@
   local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.tee $0
+  local.get $0
+  local.set $1
+  local.get $0
   local.get $3
   i32.load
   local.tee $4
   i32.ne
   if
-   local.get $0
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $0
+   local.set $1
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $3
-  local.get $0
+  local.get $1
   i32.store
   local.get $3
-  local.get $2
+  local.get $0
   i32.store offset=4
   local.get $3
   i32.const 0
@@ -1893,228 +1932,336 @@
   local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $3
   loop $for-loop|0
-   local.get $1
+   local.get $2
    i32.const 10
    i32.lt_s
    if
+    call $~lib/rt/tlsf/maybeInitialize
     i32.const 0
     i32.const 0
-    call $~lib/rt/tlsf/__alloc
-    local.tee $2
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
+    local.tee $1
     i32.const 0
-    call $~lib/memory/memory.fill
+    call $~lib/util/memory/memset
+    call $~lib/rt/tlsf/maybeInitialize
     i32.const 16
     i32.const 4
-    call $~lib/rt/tlsf/__alloc
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
     call $~lib/rt/pure/__retain
-    local.tee $3
+    local.tee $0
     i32.const 0
     i32.store
-    local.get $3
+    local.get $0
     i32.const 0
     i32.store offset=4
-    local.get $3
+    local.get $0
     i32.const 0
     i32.store offset=8
-    local.get $3
+    local.get $0
     i32.const 0
     i32.store offset=12
-    local.get $2
-    local.tee $0
-    local.get $3
+    local.get $1
+    local.set $4
+    local.get $1
+    local.get $0
     i32.load
     local.tee $5
     i32.ne
     if
-     local.get $0
+     local.get $4
      call $~lib/rt/pure/__retain
-     local.set $0
+     local.set $4
      local.get $5
-     call $~lib/rt/pure/__release
+     i32.const 1652
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
-    local.get $3
     local.get $0
+    local.get $4
     i32.store
-    local.get $3
-    local.get $2
+    local.get $0
+    local.get $1
     i32.store offset=4
-    local.get $3
+    local.get $0
     i32.const 0
     i32.store offset=8
-    local.get $3
+    local.get $0
     i32.const 0
     i32.store offset=12
     i32.const 0
-    local.set $0
+    local.set $1
     loop $for-loop|1
-     local.get $0
+     local.get $1
      i32.const 10
      i32.lt_s
      if
-      local.get $3
-      local.get $3
+      local.get $0
+      local.get $0
       i32.load offset=12
-      local.tee $5
+      local.tee $4
       i32.const 1
       i32.add
-      local.tee $2
+      local.tee $5
       call $~lib/array/ensureSize
-      local.get $3
+      local.get $0
       i32.load offset=4
-      local.get $5
+      local.get $4
       i32.const 2
       i32.shl
       i32.add
       i32.const 1344
       i32.store
-      local.get $3
-      local.get $2
-      i32.store offset=12
       local.get $0
+      local.get $5
+      i32.store offset=12
+      local.get $1
       i32.const 1
       i32.add
-      local.set $0
+      local.set $1
       br $for-loop|1
      end
     end
-    local.get $3
-    call $~lib/rt/pure/__release
-    local.get $1
+    local.get $0
+    i32.const 1652
+    i32.gt_u
+    if
+     local.get $0
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|0
    end
   end
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1652
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 1360
   i32.const 1392
-  call $~lib/string/String.__concat
-  local.tee $1
+  call $~lib/string/String#concat
+  local.tee $3
+  i32.const 1424
+  local.get $3
+  select
   i32.const 1456
-  call $~lib/string/String.__concat
-  local.get $1
-  call $~lib/rt/pure/__release
-  call $~lib/rt/pure/__release
+  call $~lib/string/String#concat
+  local.set $2
+  local.get $3
+  i32.const 1652
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1652
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 4
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $2
+  local.tee $0
   i32.const 0
   i32.store
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 4
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
   i32.store
+  local.get $0
+  local.set $4
   local.get $3
-  local.tee $0
-  local.get $2
   local.tee $1
+  local.get $0
   i32.load
-  local.tee $4
+  local.tee $2
   i32.ne
   if
-   local.get $0
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $0
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $2
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $4
   local.get $1
-  local.get $0
   i32.store
-  local.get $1
-  local.set $0
   local.get $3
-  local.tee $1
-  local.get $0
+  local.tee $2
+  local.get $4
   i32.load
-  local.tee $4
+  local.tee $1
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $1
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
+  local.get $4
+  local.get $2
   i32.store
-  local.get $0
-  local.tee $1
+  local.get $4
+  local.tee $2
   local.get $3
-  local.tee $0
+  local.tee $1
   i32.load
   local.tee $4
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
+   local.set $2
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
   local.get $1
-  i32.store
   local.get $2
-  local.tee $1
+  i32.store
   local.get $0
+  local.tee $2
+  local.get $1
   i32.load
   local.tee $4
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
+   local.set $2
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
   local.get $1
+  local.get $2
   i32.store
   local.get $3
-  local.get $2
-  local.tee $1
+  local.get $0
+  local.tee $2
   i32.load
   local.tee $4
   i32.ne
   if
-   local.get $0
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $0
+   local.set $1
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $2
   local.get $1
-  local.get $0
   i32.store
-  local.get $2
+  local.get $0
   local.get $3
   i32.load
-  local.tee $0
+  local.tee $1
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $1
+   i32.const 1652
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $3
-  local.get $1
-  i32.store
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.store
+  local.get $0
+  i32.const 1652
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1652
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   call $~lib/rt/pure/__collect
  )
  (func $~start
@@ -2466,9 +2613,13 @@
       i32.const 256
       i32.gt_u
       select
-      local.tee $4
+      local.set $4
+      call $~lib/rt/tlsf/maybeInitialize
+      local.get $4
       i32.const 0
-      call $~lib/rt/tlsf/__alloc
+      call $~lib/rt/tlsf/allocateBlock
+      i32.const 16
+      i32.add
       local.tee $2
       i32.const 16
       i32.sub
@@ -2476,7 +2627,7 @@
       local.get $2
       local.get $1
       local.get $3
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $1
       if
        local.get $1
diff --git a/tests/compiler/retain-release-sanity.untouched.wat b/tests/compiler/retain-release-sanity.untouched.wat
index f26dd06d7d..2c66da19ce 100644
--- a/tests/compiler/retain-release-sanity.untouched.wat
+++ b/tests/compiler/retain-release-sanity.untouched.wat
@@ -1,8 +1,8 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
@@ -42,6 +42,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 644))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -50,9 +113,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -65,7 +125,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -92,7 +152,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -146,7 +206,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -171,77 +231,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -258,6 +276,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -269,8 +293,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -278,7 +300,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -295,28 +317,18 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -327,44 +339,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -372,30 +374,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 128
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -414,22 +412,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -455,7 +453,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -467,18 +465,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 128
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -532,27 +530,15 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -567,24 +553,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -594,31 +566,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -626,8 +582,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -653,24 +607,22 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -678,7 +630,7 @@
    if
     i32.const 0
     i32.const 128
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -686,16 +638,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -711,7 +663,7 @@
    if
     i32.const 0
     i32.const 128
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -720,8 +672,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -732,49 +684,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -787,10 +735,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -840,73 +784,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -919,11 +836,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -943,7 +860,7 @@
   if
    i32.const 176
    i32.const 128
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -969,9 +886,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1039,31 +953,24 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1076,79 +983,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 128
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1185,9 +1061,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1201,12 +1075,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1216,7 +1090,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1253,7 +1127,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1304,29 +1178,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1346,7 +1200,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1393,7 +1247,7 @@
      if
       i32.const 0
       i32.const 128
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1414,7 +1268,7 @@
     if
      i32.const 0
      i32.const 128
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1435,7 +1289,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1470,219 +1324,214 @@
   i32.const 16
   i32.add
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/rt/pure/increment (param $0 i32)
   (local $1 i32)
   local.get $0
@@ -1880,7 +1729,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -2911,238 +2760,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
@@ -3193,22 +3037,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -3219,25 +3053,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
diff --git a/tests/compiler/retain-return.optimized.wat b/tests/compiler/retain-return.optimized.wat
index a73cfa0150..ee7e13ad86 100644
--- a/tests/compiler/retain-return.optimized.wat
+++ b/tests/compiler/retain-return.optimized.wat
@@ -1,11 +1,12 @@
 (module
- (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_none (func (param i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
@@ -18,6 +19,31 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -32,7 +58,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -54,7 +80,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -73,23 +99,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -97,61 +123,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -159,9 +177,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -170,7 +186,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -193,7 +209,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -207,7 +223,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -220,9 +236,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -231,7 +247,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -240,7 +256,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -258,9 +274,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -280,7 +296,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -313,8 +329,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -335,27 +351,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -384,13 +400,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -398,21 +414,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -427,31 +437,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -481,7 +488,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -498,7 +505,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -526,7 +533,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -578,7 +585,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -599,7 +606,8 @@
     unreachable
    end
    i32.const 1184
-   local.tee $0
+   local.set $2
+   i32.const 1184
    i32.const 0
    i32.store
    i32.const 2752
@@ -618,27 +626,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1184
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -658,24 +660,23 @@
    i32.const 1184
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -692,26 +693,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -725,7 +722,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -795,7 +792,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -811,7 +808,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -936,67 +933,304 @@
   end
   local.get $0
  )
- (func $retain-return/Ref#constructor (result i32)
+ (func $~setArgumentsLength (param $0 i32)
+  nop
+ )
+ (func $start:retain-return
+  (local $0 i32)
+  (local $1 i32)
   call $~lib/rt/tlsf/maybeInitialize
   call $~lib/rt/tlsf/allocateBlock
   i32.const 16
   i32.add
   call $~lib/rt/pure/__retain
- )
- (func $~lib/rt/pure/__release (param $0 i32)
+  local.tee $0
+  local.set $1
   local.get $0
   i32.const 1184
   i32.gt_u
   if
-   local.get $0
+   local.get $1
    i32.const 16
    i32.sub
    call $~lib/rt/pure/decrement
   end
- )
- (func $~setArgumentsLength (param $0 i32)
-  nop
- )
- (func $~start
-  (local $0 i32)
-  global.get $~started
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
   if
-   return
-  else
-   i32.const 1
-   global.set $~started
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
   global.set $retain-return/ref
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
-  call $retain-return/Ref#constructor
-  call $~lib/rt/pure/__release
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $retain-return/ref
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 1184
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $retain-return/ref
   local.tee $0
   if
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 1184
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   i32.const 0
   global.set $retain-return/ref
  )
+ (func $~start
+  global.get $~started
+  if
+   return
+  else
+   i32.const 1
+   global.set $~started
+  end
+  call $start:retain-return
+ )
  (func $~lib/rt/pure/decrement (param $0 i32)
   (local $1 i32)
   (local $2 i32)
diff --git a/tests/compiler/retain-return.untouched.wat b/tests/compiler/retain-return.untouched.wat
index b4dcef0dd6..bf5f9fa200 100644
--- a/tests/compiler/retain-return.untouched.wat
+++ b/tests/compiler/retain-return.untouched.wat
@@ -1,7 +1,7 @@
 (module
  (type $none_=>_i32 (func (result i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_none (func (param i32)))
  (type $none_=>_none (func))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
@@ -32,6 +32,69 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -40,9 +103,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -55,7 +115,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -82,7 +142,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -136,7 +196,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -161,77 +221,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -248,6 +266,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -259,8 +283,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -268,7 +290,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -285,28 +307,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -317,44 +329,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -362,30 +364,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -404,22 +402,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -445,7 +443,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -457,18 +455,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -522,27 +520,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -557,24 +543,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -584,31 +556,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -616,8 +572,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -643,24 +597,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -668,7 +620,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -676,16 +628,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -701,7 +653,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -710,8 +662,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -722,49 +674,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -777,10 +725,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -830,73 +774,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -909,11 +826,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -933,7 +850,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -959,9 +876,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1029,31 +943,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1066,79 +973,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1175,9 +1051,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1191,12 +1065,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1206,7 +1080,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1243,7 +1117,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1294,29 +1168,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1336,7 +1190,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1383,7 +1237,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1404,7 +1258,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1425,7 +1279,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/rt/instanceof.optimized.wat b/tests/compiler/rt/instanceof.optimized.wat
index d433725220..26c8bd8101 100644
--- a/tests/compiler/rt/instanceof.optimized.wat
+++ b/tests/compiler/rt/instanceof.optimized.wat
@@ -1,6 +1,6 @@
 (module
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -83,24 +83,22 @@
   i32.store offset=12
   local.get $3
  )
- (func $rt/instanceof/Animal#constructor (param $0 i32) (result i32)
+ (func $rt/instanceof/Cat#constructor (param $0 i32) (result i32)
   local.get $0
-  if (result i32)
-   local.get $0
-  else
-   i32.const 3
+  i32.eqz
+  if
+   i32.const 4
    call $~lib/rt/stub/__alloc
+   local.set $0
   end
- )
- (func $rt/instanceof/Cat#constructor (param $0 i32) (result i32)
   local.get $0
-  if (result i32)
-   local.get $0
-  else
-   i32.const 4
+  i32.eqz
+  if
+   i32.const 3
    call $~lib/rt/stub/__alloc
+   local.set $0
   end
-  call $rt/instanceof/Animal#constructor
+  local.get $0
  )
  (func $~lib/rt/__instanceof (param $0 i32) (param $1 i32) (result i32)
   local.get $0
@@ -136,8 +134,8 @@
   (local $0 i32)
   i32.const 1136
   global.set $~lib/rt/stub/offset
-  i32.const 0
-  call $rt/instanceof/Animal#constructor
+  i32.const 3
+  call $~lib/rt/stub/__alloc
   global.set $rt/instanceof/animal
   i32.const 0
   call $rt/instanceof/Cat#constructor
@@ -251,8 +249,8 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 0
-  call $rt/instanceof/Animal#constructor
+  i32.const 3
+  call $~lib/rt/stub/__alloc
   global.set $rt/instanceof/nullableAnimal
   i32.const 0
   call $rt/instanceof/Cat#constructor
diff --git a/tests/compiler/rt/stub-realloc.optimized.wat b/tests/compiler/rt/stub-realloc.optimized.wat
index 9fe92e6df9..6ffa78dcce 100644
--- a/tests/compiler/rt/stub-realloc.optimized.wat
+++ b/tests/compiler/rt/stub-realloc.optimized.wat
@@ -125,176 +125,178 @@
   global.get $~lib/rt/stub/startOffset
   global.set $~lib/rt/stub/offset
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
@@ -385,7 +387,7 @@
     local.get $0
     local.get $3
     i32.load offset=12
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $2
     local.tee $0
     i32.const 16
diff --git a/tests/compiler/rt/stub-realloc.untouched.wat b/tests/compiler/rt/stub-realloc.untouched.wat
index 17b224bc59..3532e5e988 100644
--- a/tests/compiler/rt/stub-realloc.untouched.wat
+++ b/tests/compiler/rt/stub-realloc.untouched.wat
@@ -1174,238 +1174,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/stub/__realloc (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
diff --git a/tests/compiler/runtime-full.optimized.wat b/tests/compiler/runtime-full.optimized.wat
index fa32ef6903..af680e6c28 100644
--- a/tests/compiler/runtime-full.optimized.wat
+++ b/tests/compiler/runtime-full.optimized.wat
@@ -2,12 +2,12 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 1024) "\1e\00\00\00\01\00\00\00\01\00\00\00\1e\00\00\00~\00l\00i\00b\00/\00r\00t\00/\00t\00l\00s\00f\00.\00t\00s")
@@ -23,6 +23,31 @@
  (export "__release" (func $~lib/rt/pure/__release))
  (export "__collect" (func $~lib/rt/pure/__collect))
  (export "__rtti_base" (global $~lib/rt/__rtti_base))
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -37,7 +62,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -59,7 +84,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -78,23 +103,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -102,61 +127,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -164,9 +181,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -175,7 +190,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -198,7 +213,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -212,7 +227,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -225,9 +240,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -236,7 +251,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -245,7 +260,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -263,9 +278,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -285,7 +300,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -318,8 +333,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -340,27 +355,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -389,13 +404,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -403,21 +418,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -432,31 +441,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -486,7 +492,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -503,7 +509,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -531,7 +537,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -583,7 +589,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -604,7 +610,8 @@
     unreachable
    end
    i32.const 1216
-   local.tee $0
+   local.set $2
+   i32.const 1216
    i32.const 0
    i32.store
    i32.const 2784
@@ -623,27 +630,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1216
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -663,10 +664,11 @@
    i32.const 1216
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -676,23 +678,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -721,7 +722,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -739,16 +740,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -769,26 +764,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -806,7 +797,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -851,13 +842,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -877,7 +869,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -888,7 +880,7 @@
   if
    i32.const 1088
    i32.const 1040
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -988,7 +980,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1004,7 +996,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/runtime-full.untouched.wat b/tests/compiler/runtime-full.untouched.wat
index d7ab098ac5..dea3a4a0d6 100644
--- a/tests/compiler/runtime-full.untouched.wat
+++ b/tests/compiler/runtime-full.untouched.wat
@@ -1,12 +1,12 @@
 (module
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_none (func))
  (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -27,6 +27,69 @@
  (export "__release" (func $~lib/rt/pure/__release))
  (export "__collect" (func $~lib/rt/pure/__collect))
  (export "__rtti_base" (global $~lib/rt/__rtti_base))
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -35,9 +98,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -50,7 +110,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -77,7 +137,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -131,7 +191,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -156,77 +216,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -243,6 +261,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -254,8 +278,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -263,7 +285,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -280,28 +302,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -312,44 +324,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -357,30 +359,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -399,22 +397,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -440,7 +438,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -452,18 +450,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -517,27 +515,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -552,24 +538,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -579,31 +551,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -611,8 +567,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -638,24 +592,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -663,7 +615,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -671,16 +623,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -696,7 +648,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -705,8 +657,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -717,49 +669,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -772,10 +720,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -825,73 +769,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -904,11 +821,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -928,7 +845,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -954,9 +871,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1024,31 +938,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1061,79 +968,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1170,9 +1046,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1186,12 +1060,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1201,7 +1075,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1238,7 +1112,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1289,29 +1163,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1331,7 +1185,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1378,7 +1232,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1399,7 +1253,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1420,7 +1274,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/std/array-access.optimized.wat b/tests/compiler/std/array-access.optimized.wat
index 8c4643e1d0..c4253d49a8 100644
--- a/tests/compiler/std/array-access.optimized.wat
+++ b/tests/compiler/std/array-access.optimized.wat
@@ -37,7 +37,6 @@
   i32.add
   i32.load
   local.tee $0
-  local.get $0
   i32.eqz
   if
    i32.const 1152
@@ -47,6 +46,7 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $0
  )
  (func $std/array-access/i32ArrayArrayElementAccess (param $0 i32) (result i32)
   i32.const 1
@@ -68,20 +68,16 @@
   i32.load offset=4
   i32.load offset=4
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
+ (func $std/array-access/stringArrayPropertyAccess (param $0 i32) (result i32)
   local.get $0
+  i32.const 0
+  call $~lib/array/Array<~lib/array/Array<i32>>#__get
   i32.const 16
   i32.sub
   i32.load offset=12
   i32.const 1
   i32.shr_u
  )
- (func $std/array-access/stringArrayPropertyAccess (param $0 i32) (result i32)
-  local.get $0
-  i32.const 0
-  call $~lib/array/Array<~lib/array/Array<i32>>#__get
-  call $~lib/string/String#get:length
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -165,30 +161,36 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  i32.const 1260
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.tee $1
+  local.set $2
+  local.get $1
   i32.const 0
   local.get $0
-  call $~lib/string/String#get:length
-  local.tee $2
-  i32.lt_s
-  local.set $1
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $1
   i32.const 0
-  local.get $2
   local.get $1
+  i32.lt_s
   select
-  local.tee $1
-  i32.const 1264
-  call $~lib/string/String#get:length
   local.tee $3
   i32.add
-  local.get $2
+  local.get $1
   i32.gt_s
   if
    i32.const 0
    return
   end
   local.get $0
-  local.get $1
   local.get $3
+  local.get $2
   call $~lib/util/string/compareImpl
   i32.eqz
  )
@@ -204,7 +206,11 @@
   call $~lib/array/Array<~lib/array/Array<i32>>#__get
   i32.const 1
   call $~lib/array/Array<~lib/array/Array<i32>>#__get
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
  )
  (func $std/array-access/stringArrayArrayMethodCall (param $0 i32) (result i32)
   local.get $0
diff --git a/tests/compiler/std/array-literal.optimized.wat b/tests/compiler/std/array-literal.optimized.wat
index ddd2247e86..a5d04368d8 100644
--- a/tests/compiler/std/array-literal.optimized.wat
+++ b/tests/compiler/std/array-literal.optimized.wat
@@ -1,10 +1,10 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
@@ -75,6 +75,31 @@
   i32.add
   i32.load
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -89,7 +114,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -111,7 +136,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -130,23 +155,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -154,61 +179,53 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -216,9 +233,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -227,7 +242,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -250,7 +265,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -264,7 +279,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -277,9 +292,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -288,7 +303,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -297,7 +312,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -315,9 +330,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -337,7 +352,7 @@
    if
     i32.const 0
     i32.const 1392
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -370,8 +385,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -392,27 +407,27 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1392
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -441,13 +456,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -455,21 +470,15 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -484,31 +493,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -538,7 +544,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -555,7 +561,7 @@
    if
     i32.const 0
     i32.const 1392
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -583,7 +589,7 @@
    if
     i32.const 0
     i32.const 1392
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -635,7 +641,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -656,7 +662,8 @@
     unreachable
    end
    i32.const 1536
-   local.tee $0
+   local.set $2
+   i32.const 1536
    i32.const 0
    i32.store
    i32.const 3104
@@ -675,27 +682,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1536
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -715,10 +716,11 @@
    i32.const 1536
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -728,23 +730,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -773,7 +774,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -791,16 +792,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -821,26 +816,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1392
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -858,7 +849,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -903,13 +894,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -929,7 +921,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -940,7 +932,7 @@
   if
    i32.const 1440
    i32.const 1392
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1040,7 +1032,7 @@
     if
      i32.const 0
      i32.const 1392
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1056,7 +1048,7 @@
   if
    i32.const 0
    i32.const 1392
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1081,14 +1073,6 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -1142,16 +1126,22 @@
  )
  (func $~lib/rt/__allocArray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   local.get $2
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   local.get $1
   i32.shl
   local.tee $1
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   call $~lib/rt/pure/__retain
   i32.store
@@ -1166,17 +1156,6 @@
   i32.store offset=12
   local.get $2
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1536
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $start:std/array-literal
   (local $0 i32)
   (local $1 i32)
@@ -1448,21 +1427,30 @@
   local.tee $1
   i32.load offset=4
   local.tee $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store
   local.get $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store offset=4
   local.get $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store offset=8
   local.get $1
@@ -1487,21 +1475,30 @@
   local.tee $1
   i32.load offset=4
   local.tee $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store
   local.get $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store offset=4
   local.get $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store offset=8
   local.get $1
@@ -1519,13 +1516,45 @@
    unreachable
   end
   global.get $std/array-literal/dynamicArrayI8
-  call $~lib/rt/pure/__release
+  local.tee $0
+  i32.const 1536
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array-literal/dynamicArrayI32
-  call $~lib/rt/pure/__release
+  local.tee $0
+  i32.const 1536
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array-literal/dynamicArrayRef
-  call $~lib/rt/pure/__release
+  local.tee $0
+  i32.const 1536
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array-literal/dynamicArrayRefWithCtor
-  call $~lib/rt/pure/__release
+  local.tee $0
+  i32.const 1536
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 1
   i32.const 2
   i32.const 6
@@ -1533,13 +1562,23 @@
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.load offset=4
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1536
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   call $start:std/array-literal
diff --git a/tests/compiler/std/array-literal.untouched.wat b/tests/compiler/std/array-literal.untouched.wat
index 86d15dc5a3..37788fe843 100644
--- a/tests/compiler/std/array-literal.untouched.wat
+++ b/tests/compiler/std/array-literal.untouched.wat
@@ -1,11 +1,11 @@
 (module
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
@@ -114,6 +114,69 @@
   drop
   local.get $2
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -122,9 +185,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -137,7 +197,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -164,7 +224,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -218,7 +278,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -243,77 +303,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -330,6 +348,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -341,8 +365,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -350,7 +372,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -367,28 +389,18 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -399,44 +411,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -444,30 +446,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 384
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -486,22 +484,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -527,7 +525,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -539,18 +537,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 384
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -604,27 +602,15 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -639,24 +625,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -666,31 +638,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -698,8 +654,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -725,24 +679,22 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -750,7 +702,7 @@
    if
     i32.const 0
     i32.const 384
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -758,16 +710,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -783,7 +735,7 @@
    if
     i32.const 0
     i32.const 384
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -792,8 +744,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -804,49 +756,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -859,10 +807,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -912,73 +856,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -991,11 +908,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1015,7 +932,7 @@
   if
    i32.const 432
    i32.const 384
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1041,9 +958,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1111,31 +1025,24 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1148,79 +1055,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 384
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1257,9 +1133,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1273,12 +1147,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1288,7 +1162,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1325,7 +1199,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1376,29 +1250,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1418,7 +1272,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1465,7 +1319,7 @@
      if
       i32.const 0
       i32.const 384
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1486,7 +1340,7 @@
     if
      i32.const 0
      i32.const 384
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1507,7 +1361,7 @@
   if
    i32.const 0
    i32.const 384
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -2566,238 +2420,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat
index d1cec40ab1..0c33743dd1 100644
--- a/tests/compiler/std/array.optimized.wat
+++ b/tests/compiler/std/array.optimized.wat
@@ -9,17 +9,20 @@
  (type $none_=>_i32 (func (result i32)))
  (type $none_=>_f64 (func (result f64)))
  (type $none_=>_none (func))
- (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $i64_=>_none (func (param i64)))
  (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32)))
- (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
+ (type $i32_i64_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
- (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $f32_f32_=>_i32 (func (param f32 f32) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
  (type $f64_f64_=>_i32 (func (param f64 f64) (result i32)))
  (type $i64_=>_i64 (func (param i64) (result i64)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (type $i32_i32_i32_=>_f32 (func (param i32 i32 i32) (result f32)))
  (type $i32_i32_=>_f64 (func (param i32 i32) (result f64)))
@@ -232,8 +235,8 @@
  (data (i32.const 9664) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00p$\00\00\b0$\00\00\00\00\00\00\d0$\00\00\10%\00\000%\00\00P%\00\00\90%")
  (data (i32.const 9716) "\01")
  (data (i32.const 9732) "\01")
- (table $0 57 funcref)
- (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0)
+ (table $0 56 funcref)
+ (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|2 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|16 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $start:std/array~anonymous|29 $start:std/array~anonymous|29 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|29 $start:std/array~anonymous|35 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $start:std/array~anonymous|44 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0)
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
  (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0))
  (global $std/array/arr (mut i32) (i32.const 0))
@@ -253,6 +256,31 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -267,7 +295,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -289,7 +317,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -308,23 +336,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -332,61 +360,53 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -394,9 +414,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -405,7 +423,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -428,7 +446,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -442,7 +460,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -455,9 +473,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -466,7 +484,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -475,7 +493,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -493,9 +511,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -515,7 +533,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -548,8 +566,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -570,27 +588,27 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1136
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -619,13 +637,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -633,21 +651,15 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -662,31 +674,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -716,7 +725,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -733,7 +742,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -761,7 +770,7 @@
    if
     i32.const 0
     i32.const 1136
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -813,7 +822,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -834,7 +843,8 @@
     unreachable
    end
    i32.const 9744
-   local.tee $0
+   local.set $2
+   i32.const 9744
    i32.const 0
    i32.store
    i32.const 11312
@@ -853,27 +863,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 9744
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -893,7 +897,7 @@
    i32.const 9744
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -902,7 +906,7 @@
   if
    i32.const 1184
    i32.const 1136
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -921,6 +925,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -930,23 +935,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -975,7 +979,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -993,16 +997,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -1023,26 +1021,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1136
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -1060,7 +1054,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1105,13 +1099,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -1131,7 +1126,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1222,7 +1217,7 @@
     if
      i32.const 0
      i32.const 1136
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1238,7 +1233,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1263,184 +1258,185 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i64)
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
   local.get $0
   local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
+  i32.store8
+  local.get $0
+  local.get $2
   i32.add
- )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i64)
-  (local $5 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $2
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.get $1
-   i32.store8
-   local.get $0
-   local.get $2
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $3
-   local.get $1
-   i32.store8 offset=3
-   local.get $2
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.get $1
-   i32.store8 offset=1
-   local.get $0
-   local.get $1
-   i32.store8 offset=2
-   local.get $3
-   local.get $1
-   i32.store8 offset=2
-   local.get $3
-   local.get $1
-   i32.store8 offset=1
-   local.get $2
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.get $1
-   i32.store8 offset=3
-   local.get $3
-   local.get $1
-   i32.store8
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $5
-   i32.add
-   local.tee $3
-   local.get $1
-   i32.const 255
-   i32.and
-   i32.const 16843009
-   i32.mul
-   local.tee $0
-   i32.store
-   local.get $3
-   local.get $2
-   local.get $5
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   local.get $0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $3
-   local.get $0
-   i32.store offset=4
-   local.get $3
-   local.get $0
-   i32.store offset=8
-   local.get $1
-   local.get $0
-   i32.store offset=16
-   local.get $1
-   local.get $0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $3
-   local.get $0
-   i32.store offset=12
-   local.get $3
-   local.get $0
-   i32.store offset=16
-   local.get $3
-   local.get $0
-   i32.store offset=20
-   local.get $3
-   local.get $0
-   i32.store offset=24
-   local.get $1
-   local.get $0
-   i32.store
-   local.get $1
-   local.get $0
-   i32.store offset=4
-   local.get $1
-   local.get $0
-   i32.store offset=8
-   local.get $1
-   local.get $0
-   i32.store offset=12
-   local.get $3
-   local.get $3
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $3
-   i32.add
-   local.set $1
+  i32.const 4
+  i32.sub
+  local.tee $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $3
+  i32.add
+  local.tee $0
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.const 16843009
+  i32.mul
+  local.tee $1
+  i32.store
+  local.get $0
+  local.get $2
+  local.get $3
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $3
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $2
+  local.get $1
+  i32.store offset=24
+  local.get $3
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store offset=4
+  local.get $0
+  local.get $1
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=16
+  local.get $2
+  local.get $1
+  i32.store offset=20
+  local.get $3
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $1
+  i32.store offset=16
+  local.get $0
+  local.get $1
+  i32.store offset=20
+  local.get $0
+  local.get $1
+  i32.store offset=24
+  local.get $2
+  local.get $1
+  i32.store
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $2
+  i32.add
+  local.set $0
+  local.get $3
+  local.get $2
+  i32.sub
+  local.set $2
+  local.get $1
+  i64.extend_i32_u
+  local.get $1
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $4
+  loop $while-continue|0
    local.get $2
-   local.get $3
-   i32.sub
-   local.set $2
-   local.get $0
-   i64.extend_i32_u
-   local.get $0
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $4
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    local.get $4
+    i64.store
+    local.get $0
+    local.get $4
+    i64.store offset=8
+    local.get $0
+    local.get $4
+    i64.store offset=16
+    local.get $0
+    local.get $4
+    i64.store offset=24
     local.get $2
     i32.const 32
-    i32.ge_u
-    if
-     local.get $1
-     local.get $4
-     i64.store
-     local.get $1
-     local.get $4
-     i64.store offset=8
-     local.get $1
-     local.get $4
-     i64.store offset=16
-     local.get $1
-     local.get $4
-     i64.store offset=24
-     local.get $2
-     i32.const 32
-     i32.sub
-     local.set $2
-     local.get $1
-     i32.const 32
-     i32.add
-     local.set $1
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -1495,17 +1491,6 @@
   end
   local.get $0
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 9744
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $~lib/array/Array<i32>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -1523,19 +1508,25 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   i32.const 2
   i32.shl
   local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
   i32.const 0
   local.get $4
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
@@ -1561,7 +1552,14 @@
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $3
   local.get $2
@@ -1579,220 +1577,230 @@
  )
  (func $std/array/Ref#constructor (param $0 i32) (result i32)
   (local $1 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 4
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $1
   local.get $0
   i32.store
   local.get $1
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/__allocArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   local.get $2
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   local.get $1
   i32.shl
-  local.tee $1
-  local.set $5
-  local.get $1
+  local.tee $5
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   local.get $3
   if
-   local.get $4
+   local.get $1
    local.get $3
-   local.get $5
-   call $~lib/memory/memory.copy
+   local.get $6
+   call $~lib/util/memory/memmove
   end
-  local.get $4
-  local.tee $3
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $3
+  local.get $1
   i32.store offset=4
   local.get $2
-  local.get $1
+  local.get $5
   i32.store offset=8
   local.get $2
   local.get $0
@@ -1861,7 +1869,7 @@
    local.get $3
    local.get $2
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
   end
   local.get $0
   call $~lib/rt/pure/__retain
@@ -2070,15 +2078,6 @@
   end
   i32.const 0
  )
- (func $std/array/internalCapacity<i32> (param $0 i32) (result i32)
-  local.get $0
-  i32.load
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 2
-  i32.shr_s
- )
  (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32)
   (local $1 i32)
   local.get $0
@@ -2114,7 +2113,7 @@
   if
    i32.const 0
    i32.const 1136
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -2167,7 +2166,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -2190,10 +2191,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -2223,7 +2224,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 9744
   i32.ge_u
@@ -2280,7 +2281,7 @@
    local.get $4
    local.get $2
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
    local.get $1
    local.get $3
    i32.ne
@@ -2391,7 +2392,7 @@
   i32.const 2
   i32.shl
   local.tee $0
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $0
   local.get $5
   i32.add
@@ -2400,12 +2401,13 @@
   local.get $4
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $2
  )
  (func $~lib/array/Array<i32>#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
   local.get $3
   local.get $0
   i32.load offset=12
@@ -2414,10 +2416,10 @@
   local.get $4
   i32.lt_s
   select
-  local.set $3
+  local.set $5
   local.get $0
   i32.load offset=4
-  local.tee $5
+  local.tee $6
   local.get $1
   i32.const 0
   i32.lt_s
@@ -2439,11 +2441,11 @@
    i32.lt_s
    select
   end
-  local.tee $1
+  local.tee $3
   i32.const 2
   i32.shl
   i32.add
-  local.get $5
+  local.get $6
   local.get $2
   i32.const 0
   i32.lt_s
@@ -2451,9 +2453,9 @@
    local.get $2
    local.get $4
    i32.add
-   local.tee $2
+   local.tee $1
    i32.const 0
-   local.get $2
+   local.get $1
    i32.const 0
    i32.gt_s
    select
@@ -2465,36 +2467,36 @@
    i32.lt_s
    select
   end
-  local.tee $2
+  local.tee $1
   i32.const 2
   i32.shl
   i32.add
-  local.get $3
+  local.get $5
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $3
    local.get $4
+   local.get $5
    i32.add
-   local.tee $3
+   local.tee $2
    i32.const 0
-   local.get $3
+   local.get $2
    i32.const 0
    i32.gt_s
    select
   else
-   local.get $3
+   local.get $5
    local.get $4
-   local.get $3
+   local.get $5
    local.get $4
    i32.lt_s
    select
   end
-  local.get $2
+  local.get $1
   i32.sub
   local.tee $2
   local.get $4
-  local.get $1
+  local.get $3
   i32.sub
   local.tee $1
   local.get $2
@@ -2503,7 +2505,7 @@
   select
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -2528,7 +2530,7 @@
   i32.sub
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   local.get $1
   i32.store
@@ -2596,14 +2598,6 @@
   end
   i32.const -1
  )
- (func $~lib/array/Array<i32>#includes (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $2
-  call $~lib/array/Array<i32>#indexOf
-  i32.const 0
-  i32.ge_s
- )
  (func $~lib/array/Array<i32>#splice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -2666,7 +2660,7 @@
   local.get $2
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   local.get $1
   local.get $2
@@ -2685,7 +2679,7 @@
    i32.sub
    i32.const 2
    i32.shl
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   end
   local.get $0
   local.get $3
@@ -2757,7 +2751,7 @@
   local.get $2
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   local.get $1
   local.get $2
@@ -2776,7 +2770,7 @@
    i32.sub
    i32.const 2
    i32.shl
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   end
   local.get $0
   local.get $3
@@ -2785,16 +2779,6 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/array/Array<std/array/Ref>#__unchecked_get (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load
-  call $~lib/rt/pure/__retain
- )
  (func $~lib/array/Array<std/array/Ref>#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
@@ -2809,13 +2793,25 @@
    unreachable
   end
   local.get $0
+  i32.load offset=4
   local.get $1
-  call $~lib/array/Array<std/array/Ref>#__unchecked_get
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load
+  call $~lib/rt/pure/__retain
   local.tee $0
   i32.eqz
   if
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    i32.const 4928
    i32.const 1088
    i32.const 108
@@ -2875,7 +2871,7 @@
   local.get $1
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   local.get $1
   local.get $2
@@ -2894,7 +2890,7 @@
    i32.sub
    i32.const 2
    i32.shl
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   end
   local.get $0
   local.get $3
@@ -2917,8 +2913,13 @@
    unreachable
   end
   local.get $0
+  i32.load offset=4
   local.get $1
-  call $~lib/array/Array<std/array/Ref>#__unchecked_get
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load
+  call $~lib/rt/pure/__retain
  )
  (func $~lib/array/Array<i32>#__set (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
@@ -3747,7 +3748,7 @@
   if
    i32.const 0
    i32.const 5040
-   i32.const 1404
+   i32.const 1381
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -3760,6 +3761,7 @@
   (local $5 i32)
   (local $6 f32)
   (local $7 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const 31
   i32.add
@@ -3769,11 +3771,13 @@
   i32.shl
   local.tee $2
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $5
   i32.const 0
   local.get $2
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $1
   i32.const 1
   i32.sub
@@ -4040,6 +4044,7 @@
   (local $5 i32)
   (local $6 f64)
   (local $7 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const 31
   i32.add
@@ -4049,11 +4054,13 @@
   i32.shl
   local.tee $2
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $5
   i32.const 0
   local.get $2
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $1
   i32.const 1
   i32.sub
@@ -4341,6 +4348,7 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const 31
   i32.add
@@ -4350,11 +4358,13 @@
   i32.shl
   local.tee $3
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $5
   i32.const 0
   local.get $3
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $1
   i32.const 1
   i32.sub
@@ -4842,8 +4852,8 @@
    local.get $0
    local.get $1
    call $~lib/array/Array<i32>#sort
-   local.tee $3
    local.tee $0
+   local.tee $3
    i32.load offset=12
    local.set $4
    loop $for-loop|0
@@ -4852,12 +4862,12 @@
     i32.lt_s
     if
      i32.const 0
-     local.get $0
+     local.get $3
      local.get $2
      i32.const 1
      i32.sub
      call $~lib/array/Array<u32>#__get
-     local.get $0
+     local.get $3
      local.get $2
      call $~lib/array/Array<u32>#__get
      local.get $1
@@ -4884,8 +4894,15 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $start:std/array~anonymous|44 (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -4921,24 +4938,30 @@
    i32.store offset=12
   end
   local.get $2
-  local.tee $3
   local.get $0
   i32.load offset=4
   local.get $1
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
-  i32.load
   local.tee $1
+  i32.load
+  local.tee $0
   i32.ne
   if
-   local.get $0
-   local.get $3
+   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
    i32.store
-   local.get $1
-   call $~lib/rt/pure/__release
+   local.get $0
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
  )
  (func $std/array/createReverseOrderedNestedArray (result i32)
@@ -4947,16 +4970,22 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 8
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $0
   i32.const 0
   i32.const 8
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 12
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 0
@@ -4982,7 +5011,14 @@
    call $~lib/rt/pure/__retain
    local.set $1
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   local.get $1
@@ -5014,7 +5050,14 @@
     local.get $0
     call $~lib/array/Array<~lib/array/Array<i32>>#__set
     local.get $0
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $0
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $3
     i32.const 1
     i32.add
@@ -5155,62 +5198,91 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/array/assertSorted<~lib/array/Array<i32>> (param $0 i32) (param $1 i32)
+ (func $std/array/isSorted<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  block $__inlined_func$std/array/isSorted<~lib/array/Array<i32>> (result i32)
-   i32.const 1
-   local.set $2
-   local.get $0
-   local.get $1
-   call $~lib/array/Array<~lib/array/Array<i32>>#sort
-   local.tee $5
-   local.tee $4
-   i32.load offset=12
-   local.set $6
-   loop $for-loop|0
+  i32.const 1
+  local.set $2
+  local.get $0
+  i32.load offset=12
+  local.set $5
+  loop $for-loop|0
+   local.get $2
+   local.get $5
+   i32.lt_s
+   if
+    local.get $0
     local.get $2
-    local.get $6
-    i32.lt_s
+    i32.const 1
+    i32.sub
+    call $~lib/array/Array<std/array/Ref>#__get
+    local.tee $3
+    local.get $0
+    local.get $2
+    call $~lib/array/Array<std/array/Ref>#__get
+    local.tee $4
+    local.get $1
+    call_indirect (type $i32_i32_=>_i32)
+    i32.const 0
+    i32.gt_s
     if
-     local.get $4
-     local.get $2
-     i32.const 1
-     i32.sub
-     call $~lib/array/Array<std/array/Ref>#__get
-     local.tee $0
-     local.get $4
-     local.get $2
-     call $~lib/array/Array<std/array/Ref>#__get
-     local.tee $3
-     local.get $1
-     call_indirect (type $i32_i32_=>_i32)
-     i32.const 0
-     i32.gt_s
+     local.get $3
+     i32.const 9744
+     i32.gt_u
      if
-      local.get $0
-      call $~lib/rt/pure/__release
       local.get $3
-      call $~lib/rt/pure/__release
-      i32.const 0
-      br $__inlined_func$std/array/isSorted<~lib/array/Array<i32>>
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $0
-     call $~lib/rt/pure/__release
+     local.get $4
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $4
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     i32.const 0
+     return
+    end
+    local.get $3
+    i32.const 9744
+    i32.gt_u
+    if
      local.get $3
-     call $~lib/rt/pure/__release
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
     end
+    local.get $4
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
    end
-   i32.const 1
   end
+  i32.const 1
+ )
+ (func $std/array/assertSorted<~lib/array/Array<i32>> (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/array/Array<~lib/array/Array<i32>>#sort
+  local.tee $0
+  local.get $1
+  call $std/array/isSorted<~lib/array/Array<i32>>
   i32.eqz
   if
    i32.const 0
@@ -5220,8 +5292,15 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
-  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/array/createReverseOrderedElementsArray (result i32)
   (local $0 i32)
@@ -5229,16 +5308,22 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 2048
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $0
   i32.const 0
   i32.const 2048
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 14
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 0
@@ -5264,7 +5349,14 @@
    call $~lib/rt/pure/__retain
    local.set $1
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   local.get $1
@@ -5283,9 +5375,12 @@
    i32.const 512
    i32.lt_s
    if
+    call $~lib/rt/tlsf/maybeInitialize
     i32.const 4
     i32.const 13
-    call $~lib/rt/tlsf/__alloc
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
     call $~lib/rt/pure/__retain
     local.tee $0
     i32.const 511
@@ -5297,7 +5392,14 @@
     local.get $0
     call $~lib/array/Array<~lib/array/Array<i32>>#__set
     local.get $0
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $0
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $3
     i32.const 1
     i32.add
@@ -5314,13 +5416,82 @@
   i32.load
   i32.sub
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
+ (func $std/array/isSorted<~lib/string/String | null> (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  i32.const 1
+  local.set $1
   local.get $0
-  i32.const 16
-  i32.sub
   i32.load offset=12
+  local.set $4
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $0
+    local.get $1
+    i32.const 1
+    i32.sub
+    call $~lib/array/Array<std/array/Ref | null>#__get
+    local.tee $2
+    local.get $0
+    local.get $1
+    call $~lib/array/Array<std/array/Ref | null>#__get
+    local.tee $3
+    call $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0
+    i32.const 0
+    i32.gt_s
+    if
+     local.get $2
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $2
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $3
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $3
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     i32.const 0
+     return
+    end
+    local.get $2
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $3
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
+   end
+  end
   i32.const 1
-  i32.shr_u
  )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -5414,24 +5585,31 @@
    select
    select
    br_if $folding-inner0
-   local.get $0
-   call $~lib/string/String#get:length
-   local.set $2
    i32.const 0
    local.get $1
-   call $~lib/string/String#get:length
-   local.tee $3
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.tee $2
    i32.eqz
-   local.get $2
+   local.get $0
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.tee $3
    select
    br_if $folding-inner0
-   local.get $2
+   local.get $3
    i32.eqz
    if
     i32.const -1
     return
    end
-   local.get $3
+   local.get $2
    i32.eqz
    if
     i32.const 1
@@ -5439,10 +5617,10 @@
    end
    local.get $0
    local.get $1
-   local.get $2
    local.get $3
    local.get $2
    local.get $3
+   local.get $2
    i32.lt_s
    select
    call $~lib/util/string/compareImpl
@@ -5467,10 +5645,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -5482,98 +5668,316 @@
   end
   i32.const 0
  )
- (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32)
+ (func $std/array/isArraysEqual<~lib/string/String | null> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $__inlined_func$~lib/string/String#concat (result i32)
-   local.get $0
-   i32.const 6176
-   local.get $0
-   select
-   local.set $2
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.tee $0
-   i32.eqz
+  (local $5 i32)
+  local.get $0
+  i32.load offset=12
+  local.tee $5
+  local.get $1
+  i32.load offset=12
+  i32.ne
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   i32.const 1
+   return
+  end
+  loop $for-loop|0
+   local.get $2
+   local.get $5
+   i32.lt_s
    if
     local.get $0
-    i32.const 6176
-    i32.ne
+    local.get $2
+    call $~lib/array/Array<std/array/Ref | null>#__get
+    local.tee $3
+    local.get $1
+    local.get $2
+    call $~lib/array/Array<std/array/Ref | null>#__get
+    local.tee $4
+    call $~lib/string/String.__eq
+    i32.eqz
     if
-     local.get $0
-     call $~lib/rt/pure/__release
+     local.get $3
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $3
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $4
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $4
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     i32.const 0
+     return
     end
-    i32.const 6176
-    local.set $0
-   end
-   local.get $2
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $3
-   local.get $0
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $4
-   i32.add
-   local.tee $1
-   i32.eqz
-   if
-    local.get $0
-    call $~lib/rt/pure/__release
-    i32.const 6064
-    br $__inlined_func$~lib/string/String#concat
+    local.get $3
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $4
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
    end
-   local.get $1
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.tee $1
-   local.get $2
-   local.get $3
-   call $~lib/memory/memory.copy
-   local.get $1
-   local.get $3
-   i32.add
-   local.get $0
-   local.get $4
-   call $~lib/memory/memory.copy
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
   end
+  i32.const 1
  )
- (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  i32.const 0
-  local.get $0
-  call $~lib/string/String#get:length
-  local.tee $2
-  i32.const 0
-  local.get $2
-  i32.lt_s
-  select
-  local.tee $3
-  local.get $1
-  i32.const 0
-  local.get $1
-  i32.const 0
-  i32.gt_s
-  select
-  local.tee $1
-  local.get $2
   local.get $1
-  local.get $2
-  i32.lt_s
-  select
+  call $~lib/rt/pure/__retain
   local.tee $1
-  local.get $3
+  i32.eqz
+  if
+   local.get $1
+   i32.const 6176
+   i32.ne
+   if
+    local.get $1
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+   end
+   i32.const 6176
+   local.set $1
+  end
   local.get $1
-  i32.gt_s
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $4
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $2
+  i32.add
+  local.tee $3
+  i32.eqz
+  if
+   local.get $1
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   i32.const 6064
+   return
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  local.get $0
+  local.get $2
+  call $~lib/util/memory/memmove
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $1
+  local.get $4
+  call $~lib/util/memory/memmove
+  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+ )
+ (func $std/array/createRandomString (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  i32.const 6064
+  local.set $2
+  loop $for-loop|0
+   local.get $3
+   local.get $0
+   i32.lt_s
+   if
+    block $__inlined_func$~lib/string/String#charAt (result i32)
+     i32.const 6064
+     call $~lib/math/NativeMath.random
+     i32.const 5084
+     i32.load
+     i32.const 1
+     i32.shr_u
+     f64.convert_i32_s
+     f64.mul
+     f64.floor
+     i32.trunc_f64_s
+     local.tee $5
+     i32.const 5084
+     i32.load
+     i32.const 1
+     i32.shr_u
+     i32.ge_u
+     br_if $__inlined_func$~lib/string/String#charAt
+     drop
+     call $~lib/rt/tlsf/maybeInitialize
+     i32.const 2
+     i32.const 1
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
+     local.tee $1
+     local.get $5
+     i32.const 1
+     i32.shl
+     i32.const 5088
+     i32.add
+     i32.load16_u
+     i32.store16
+     local.get $1
+     call $~lib/rt/pure/__retain
+    end
+    local.set $5
+    local.get $2
+    local.tee $1
+    i32.const 6176
+    local.get $1
+    select
+    local.get $5
+    call $~lib/string/String#concat
+    local.tee $4
+    local.set $2
+    local.get $1
+    local.get $4
+    i32.ne
+    if
+     local.get $2
+     call $~lib/rt/pure/__retain
+     local.set $2
+     local.get $1
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $1
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+    end
+    local.get $5
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $5
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $4
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
+   end
+  end
+  local.get $2
+ )
+ (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  i32.const 0
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $2
+  i32.const 0
+  local.get $2
+  i32.lt_s
+  select
+  local.tee $3
+  local.get $1
+  i32.const 0
+  local.get $1
+  i32.const 0
+  i32.gt_s
+  select
+  local.tee $1
+  local.get $2
+  local.get $1
+  local.get $2
+  i32.lt_s
+  select
+  local.tee $1
+  local.get $3
+  local.get $1
+  i32.gt_s
   select
   i32.const 1
   i32.shl
@@ -5607,15 +6011,18 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $3
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   local.get $1
   i32.add
   local.get $3
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $2
   call $~lib/rt/pure/__retain
  )
@@ -5649,8 +6056,10 @@
    return
   end
   local.get $3
-  i32.const 6304
-  call $~lib/string/String#get:length
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 5
   i32.add
@@ -5660,8 +6069,13 @@
   local.tee $7
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|1
@@ -5690,7 +6104,7 @@
     local.get $6
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $2
     local.get $6
     i32.add
@@ -5706,7 +6120,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -5740,7 +6154,7 @@
   local.get $0
   i32.const 1
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $7
   local.get $0
   local.get $2
@@ -5752,7 +6166,14 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
@@ -5799,7 +6220,7 @@
   i32.lt_u
   select
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -5839,7 +6260,7 @@
   local.get $0
   i32.const 31
   i32.shr_u
-  local.tee $1
+  local.tee $2
   if
    i32.const 0
    local.get $0
@@ -5848,24 +6269,29 @@
   end
   local.get $0
   call $~lib/util/number/decimalCount32
-  local.get $1
+  local.get $2
   i32.add
   local.tee $3
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   local.get $0
   local.get $3
-  call $~lib/util/number/utoa_simple<u32>
-  local.get $1
+  call $~lib/util/number/utoa32_core
+  local.get $2
   if
-   local.get $2
+   local.get $1
    i32.const 45
    i32.store16
   end
-  local.get $2
+  local.get $1
   call $~lib/rt/pure/__retain
  )
  (func $~lib/util/number/itoa_stream<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -5913,7 +6339,7 @@
   local.get $1
   i32.add
   local.tee $0
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $0
  )
  (func $~lib/util/string/joinIntegerArray<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -5942,7 +6368,11 @@
   end
   local.get $4
   local.get $2
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $5
   i32.const 11
   i32.add
@@ -5952,8 +6382,13 @@
   local.tee $7
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -5984,7 +6419,7 @@
      local.get $5
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $3
      local.get $5
      i32.add
@@ -6016,19 +6451,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/array/Array<i32>#join (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=12
-  local.get $1
-  call $~lib/util/string/joinIntegerArray<i32>
- )
  (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -6040,16 +6474,21 @@
   end
   local.get $0
   call $~lib/util/number/decimalCount32
-  local.tee $1
+  local.tee $2
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   local.get $0
-  local.get $1
-  call $~lib/util/number/utoa_simple<u32>
   local.get $2
+  call $~lib/util/number/utoa32_core
+  local.get $1
   call $~lib/rt/pure/__retain
  )
  (func $~lib/util/number/itoa_stream<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -6076,7 +6515,7 @@
   local.get $2
   call $~lib/util/number/decimalCount32
   local.tee $0
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $0
  )
  (func $~lib/util/string/joinIntegerArray<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -6105,7 +6544,11 @@
   end
   local.get $4
   local.get $2
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $5
   i32.const 10
   i32.add
@@ -6115,8 +6558,13 @@
   local.tee $7
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -6147,7 +6595,7 @@
      local.get $5
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $3
      local.get $5
      i32.add
@@ -6179,55 +6627,155 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
-   return
-  end
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   return
+  end
   local.get $1
  )
- (func $~lib/array/Array<u32>#join (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.tee $2
   local.get $0
-  i32.load offset=4
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
   local.get $0
-  i32.load offset=12
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
+  local.get $3
   local.get $1
-  call $~lib/util/string/joinIntegerArray<u32>
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store16
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (param $5 i32) (result i32)
+  (local $6 i32)
   (local $7 i32)
-  (local $8 i64)
+  (local $8 i32)
   (local $9 i64)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i64)
   (local $12 i64)
-  (local $13 i64)
-  local.get $3
+  local.get $2
   local.get $1
   i64.sub
   local.set $9
-  local.get $3
+  local.get $2
   i64.const 1
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
-  local.tee $10
+  local.tee $8
   i64.extend_i32_s
   i64.shl
-  local.tee $11
+  local.tee $10
   i64.const 1
   i64.sub
-  local.tee $12
+  local.tee $11
   i64.and
-  local.set $8
-  local.get $3
-  local.get $10
+  local.set $1
+  local.get $2
+  local.get $8
   i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $7
+  local.tee $6
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $3
   loop $while-continue|0
-   local.get $4
+   local.get $3
    i32.const 0
    i32.gt_s
    if
@@ -6242,346 +6790,417 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
-               local.tee $2
+               local.get $3
+               local.tee $7
                i32.const 10
                i32.ne
                if
-                local.get $2
+                local.get $7
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $7
+               local.get $6
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $7
+               local.set $3
+               local.get $6
                i32.const 1000000000
                i32.rem_u
-               local.set $7
+               local.set $6
                br $break|1
               end
-              local.get $7
+              local.get $6
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $7
+              local.set $3
+              local.get $6
               i32.const 100000000
               i32.rem_u
-              local.set $7
+              local.set $6
               br $break|1
              end
-             local.get $7
+             local.get $6
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $7
+             local.set $3
+             local.get $6
              i32.const 10000000
              i32.rem_u
-             local.set $7
+             local.set $6
              br $break|1
             end
-            local.get $7
+            local.get $6
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $7
+            local.set $3
+            local.get $6
             i32.const 1000000
             i32.rem_u
-            local.set $7
+            local.set $6
             br $break|1
            end
-           local.get $7
+           local.get $6
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $7
+           local.set $3
+           local.get $6
            i32.const 100000
            i32.rem_u
-           local.set $7
+           local.set $6
            br $break|1
           end
-          local.get $7
+          local.get $6
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $7
+          local.set $3
+          local.get $6
           i32.const 10000
           i32.rem_u
-          local.set $7
+          local.set $6
           br $break|1
          end
-         local.get $7
+         local.get $6
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $7
+         local.set $3
+         local.get $6
          i32.const 1000
          i32.rem_u
-         local.set $7
+         local.set $6
          br $break|1
         end
-        local.get $7
+        local.get $6
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $7
+        local.set $3
+        local.get $6
         i32.const 100
         i32.rem_u
-        local.set $7
+        local.set $6
         br $break|1
        end
-       local.get $7
+       local.get $6
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $7
+       local.set $3
+       local.get $6
        i32.const 10
        i32.rem_u
-       local.set $7
+       local.set $6
        br $break|1
       end
-      local.get $7
-      local.set $2
+      local.get $6
+      local.set $3
       i32.const 0
-      local.set $7
+      local.set $6
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $6
+    local.get $3
+    local.get $5
     i32.or
     if
      local.get $0
-     local.get $6
+     local.get $5
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $6
+     local.get $5
      i32.const 1
      i32.add
-     local.set $6
+     local.set $5
     end
-    local.get $4
+    local.get $7
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $8
-    local.get $7
+    local.set $3
+    local.get $1
+    local.get $6
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $3
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $5
      local.get $4
+     local.get $2
+     local.get $3
      i32.const 2
      i32.shl
      i32.const 7768
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $6
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $2
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $2
-     local.get $4
-     i32.store16
-     local.get $6
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $5
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $13
-  loop $while-continue|4 (result i32)
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $8
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $13
-   i64.shr_u
    local.tee $1
-   local.get $6
+   local.get $2
+   i64.shr_u
+   local.tee $12
+   local.get $5
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $6
+    local.get $5
     i32.const 1
     i32.shl
     i32.add
-    local.get $1
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
     i32.store16
-    local.get $6
+    local.get $5
     i32.const 1
     i32.add
-    local.set $6
+    local.set $5
    end
-   local.get $4
+   local.get $3
    i32.const 1
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $12
+   local.set $3
+   local.get $1
+   local.get $11
    i64.and
-   local.tee $8
-   local.get $5
-   i64.ge_u
-   br_if $while-continue|4
-   local.get $4
-   global.get $~lib/util/number/_K
-   i32.add
-   global.set $~lib/util/number/_K
-   local.get $8
-   local.set $1
-   local.get $9
-   i32.const 0
+   local.tee $1
    local.get $4
+   i64.ge_u
+   br_if $while-continue|2
+  end
+  local.get $3
+  global.get $~lib/util/number/_K
+  i32.add
+  global.set $~lib/util/number/_K
+  local.get $0
+  local.get $5
+  local.get $4
+  local.get $1
+  local.get $10
+  local.get $9
+  i32.const 0
+  local.get $3
+  i32.sub
+  i32.const 2
+  i32.shl
+  i32.const 7768
+  i32.add
+  i64.load32_u
+  i64.mul
+  call $~lib/util/number/grisuRound
+  local.get $5
+ )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i32)
+  (local $6 i64)
+  (local $7 i32)
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $4
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $5
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $4
+  i64.const 4503599627370495
+  i64.and
+  i64.add
+  local.tee $4
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.tee $6
+  i64.clz
+  i32.wrap_i64
+  local.set $3
+  local.get $6
+  local.get $3
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_plus
+  local.get $5
+  i32.const 1
+  local.get $5
+  select
+  i32.const 1075
+  i32.sub
+  local.tee $5
+  i32.const 1
+  i32.sub
+  local.get $3
+  i32.sub
+  local.set $3
+  local.get $4
+  local.get $4
+  i64.const 4503599627370496
+  i64.eq
+  i32.const 1
+  i32.add
+  local.tee $7
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $5
+  local.get $7
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+  i32.const 348
+  i32.const -61
+  global.get $~lib/util/number/_exp
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.tee $0
+  i32.trunc_f64_s
+  local.tee $3
+  local.get $3
+  f64.convert_i32_s
+  local.get $0
+  f64.ne
+  i32.add
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.tee $3
+  i32.const 3
+  i32.shl
+  local.tee $7
+  i32.sub
+  global.set $~lib/util/number/_K
+  local.get $7
+  i32.const 6896
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.const 7592
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $3
+  local.get $1
+  local.get $4
+  local.get $4
+  i64.clz
+  i32.wrap_i64
+  i64.extend_i32_s
+  i64.shl
+  global.get $~lib/util/number/_frc_pow
+  local.tee $4
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $6
+  global.get $~lib/util/number/_exp
+  local.get $3
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $6
+  global.get $~lib/util/number/_frc_minus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $2
+  if
+   i32.const 0
+   local.get $1
    i32.sub
-   i32.const 2
-   i32.shl
-   i32.const 7768
-   i32.add
-   i64.load32_u
-   i64.mul
-   local.set $3
-   local.get $0
-   local.get $6
-   i32.const 1
-   i32.sub
-   i32.const 1
-   i32.shl
-   i32.add
-   local.tee $2
-   i32.load16_u
-   local.set $4
-   loop $while-continue|6
-    i32.const 1
-    local.get $3
-    local.get $1
-    i64.sub
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.sub
-    i64.gt_u
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.lt_u
-    select
-    i32.const 0
-    local.get $5
-    local.get $1
-    i64.sub
-    local.get $11
-    i64.ge_u
-    i32.const 0
-    local.get $1
-    local.get $3
-    i64.lt_u
-    select
-    select
-    if
-     local.get $4
-     i32.const 1
-     i32.sub
-     local.set $4
-     local.get $1
-     local.get $11
-     i64.add
-     local.set $1
-     br $while-continue|6
-    end
-   end
-   local.get $2
-   local.get $4
-   i32.store16
-   local.get $6
+   local.set $1
   end
+  local.get $1
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $1
  )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -6667,7 +7286,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $0
     i32.const 46
     i32.store16
@@ -6696,7 +7315,7 @@
      local.get $1
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $0
      i32.const 3014704
      i32.store
@@ -6733,36 +7352,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $1
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       i32.const 2
       i32.add
      else
@@ -6778,7 +7373,7 @@
       local.tee $2
       i32.const 2
       i32.sub
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $0
       i32.const 46
       i32.store16 offset=2
@@ -6789,37 +7384,13 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $2
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
-      local.get $0
-      local.get $1
+      call $~lib/util/number/genExponent
+      local.get $1
       i32.add
       i32.const 2
       i32.add
@@ -6829,380 +7400,119 @@
   end
  )
  (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i32)
-  (local $7 i64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i64)
+  (local $2 i32)
   local.get $1
   f64.const 0
   f64.lt
-  local.tee $8
-  if (result f64)
+  local.tee $2
+  if
    local.get $0
    i32.const 45
    i32.store16
    local.get $1
    f64.neg
-  else
-   local.get $1
+   local.set $1
   end
-  i64.reinterpret_f64
-  local.tee $3
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.tee $6
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $3
-  i64.const 4503599627370495
-  i64.and
-  i64.add
-  local.tee $2
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.tee $3
-  local.get $3
-  i64.clz
-  i32.wrap_i64
-  local.tee $4
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_plus
-  local.get $6
-  i32.const 1
-  local.get $6
-  select
-  i32.const 1075
-  i32.sub
-  local.tee $6
-  i32.const 1
-  i32.sub
-  local.get $4
-  i32.sub
-  local.set $4
-  local.get $2
+  local.get $0
   local.get $2
-  i64.const 4503599627370496
-  i64.eq
   i32.const 1
+  i32.shl
   i32.add
-  local.tee $9
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $6
-  local.get $9
-  i32.sub
-  local.get $4
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $4
-  global.set $~lib/util/number/_exp
-  i32.const 348
-  i32.const -61
-  global.get $~lib/util/number/_exp
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.tee $1
-  i32.trunc_f64_s
-  local.tee $4
-  local.get $4
-  f64.convert_i32_s
   local.get $1
-  f64.ne
-  i32.add
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.tee $4
-  i32.const 3
-  i32.shl
-  local.tee $9
+  local.get $0
+  local.get $2
+  call $~lib/util/number/grisu2
+  local.get $2
   i32.sub
-  global.set $~lib/util/number/_K
-  local.get $9
-  i32.const 6896
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  local.get $4
-  i32.const 1
-  i32.shl
-  i32.const 7592
+  global.get $~lib/util/number/_K
+  call $~lib/util/number/prettify
+  local.get $2
   i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  global.get $~lib/util/number/_frc_pow
-  local.tee $3
-  i64.const 4294967295
-  i64.and
-  local.set $5
+ )
+ (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
   local.get $0
-  local.get $8
+  local.get $1
   i32.const 1
   i32.shl
   i32.add
-  local.get $0
-  local.get $2
+  local.set $0
   local.get $2
-  i64.clz
-  i32.wrap_i64
-  local.tee $0
-  i64.extend_i32_s
-  i64.shl
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $10
-  i64.mul
-  local.get $5
-  local.get $7
-  i64.mul
+  f64.const 0
+  f64.eq
+  if
+   local.get $0
+   i32.const 48
+   i32.store16
+   local.get $0
+   i32.const 46
+   i32.store16 offset=2
+   local.get $0
+   i32.const 48
+   i32.store16 offset=4
+   i32.const 3
+   return
+  end
   local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $5
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
   local.get $2
-  local.get $10
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $4
-  local.get $6
+  f64.sub
+  f64.const 0
+  f64.ne
+  if
+   local.get $2
+   local.get $2
+   f64.ne
+   if
+    local.get $0
+    i32.const 78
+    i32.store16
+    local.get $0
+    i32.const 97
+    i32.store16 offset=2
+    local.get $0
+    i32.const 78
+    i32.store16 offset=4
+    i32.const 3
+    return
+   else
+    local.get $2
+    f64.const 0
+    f64.lt
+    local.tee $1
+    if
+     local.get $0
+     i32.const 45
+     i32.store16
+     local.get $0
+     i32.const 2
+     i32.add
+     local.set $0
+    end
+    local.get $0
+    i64.const 29555310648492105
+    i64.store
+    local.get $0
+    i64.const 34058970405077102
+    i64.store offset=8
+    local.get $1
+    i32.const 8
+    i32.add
+    return
+   end
+   unreachable
+  end
   local.get $0
-  i32.sub
-  i32.add
-  i32.const -64
-  i32.sub
-  global.get $~lib/util/number/_frc_plus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $10
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $10
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $2
-  local.get $4
-  global.get $~lib/util/number/_exp
-  i32.add
-  i32.const -64
-  i32.sub
-  local.get $2
-  global.get $~lib/util/number/_frc_minus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $3
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $3
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $3
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  local.get $8
-  call $~lib/util/number/genDigits
-  local.get $8
-  i32.sub
-  global.get $~lib/util/number/_K
-  call $~lib/util/number/prettify
-  local.get $8
-  i32.add
- )
- (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 i32) (param $2 f64) (result i32)
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.shl
-  i32.add
-  local.set $0
-  local.get $2
-  f64.const 0
-  f64.eq
-  if
-   local.get $0
-   i32.const 48
-   i32.store16
-   local.get $0
-   i32.const 46
-   i32.store16 offset=2
-   local.get $0
-   i32.const 48
-   i32.store16 offset=4
-   i32.const 3
-   return
-  end
-  local.get $2
-  local.get $2
-  f64.sub
-  f64.const 0
-  f64.ne
-  if
-   local.get $2
-   local.get $2
-   f64.ne
-   if
-    local.get $0
-    i32.const 78
-    i32.store16
-    local.get $0
-    i32.const 97
-    i32.store16 offset=2
-    local.get $0
-    i32.const 78
-    i32.store16 offset=4
-    i32.const 3
-    return
-   else
-    local.get $2
-    f64.const 0
-    f64.lt
-    local.tee $1
-    if
-     local.get $0
-     i32.const 45
-     i32.store16
-     local.get $0
-     i32.const 2
-     i32.add
-     local.set $0
-    end
-    local.get $0
-    i64.const 29555310648492105
-    i64.store
-    local.get $0
-    i64.const 34058970405077102
-    i64.store offset=8
-    local.get $1
-    i32.const 8
-    i32.add
-    return
-   end
-   unreachable
-  end
-  local.get $0
-  local.get $2
-  call $~lib/util/number/dtoa_core
- )
- (func $~lib/util/string/joinFloatArray<f64> (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 f64)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  local.get $1
-  i32.const 1
+  local.get $2
+  call $~lib/util/number/dtoa_core
+ )
+ (func $~lib/util/string/joinFloatArray<f64> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 f64)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  local.get $1
+  i32.const 1
   i32.sub
   local.tee $4
   i32.const 0
@@ -7249,9 +7559,12 @@
      local.set $0
      br $__inlined_func$~lib/util/number/dtoa
     end
+    call $~lib/rt/tlsf/maybeInitialize
     i32.const 56
     i32.const 1
-    call $~lib/rt/tlsf/__alloc
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
     local.tee $1
     local.get $3
     call $~lib/util/number/dtoa_core
@@ -7277,8 +7590,10 @@
    return
   end
   local.get $4
-  i32.const 6736
-  call $~lib/string/String#get:length
+  i32.const 6732
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $5
   i32.const 28
   i32.add
@@ -7288,8 +7603,13 @@
   local.tee $7
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -7320,7 +7640,7 @@
      local.get $5
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $5
      i32.add
@@ -7352,7 +7672,14 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
@@ -7368,50 +7695,62 @@
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $6
+  local.tee $7
   i32.const 0
   i32.lt_s
   if
    i32.const 6064
    return
   end
-  local.get $6
+  local.get $7
   i32.eqz
   if
    local.get $0
    i32.load
-   local.tee $5
-   if
-    local.get $5
+   local.tee $4
+   if (result i32)
+    local.get $4
     call $~lib/rt/pure/__retain
-    local.set $5
+   else
+    local.get $4
    end
-   local.get $5
+   local.tee $0
    if (result i32)
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__retain
    else
     i32.const 6064
    end
-   local.get $5
-   call $~lib/rt/pure/__release
+   local.get $0
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 6064
   local.set $1
   local.get $2
-  local.tee $4
-  call $~lib/string/String#get:length
-  local.set $8
+  local.tee $5
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.set $9
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $4
+   local.get $7
    i32.lt_s
    if
     local.get $3
     local.tee $2
     local.get $0
-    local.get $5
+    local.get $4
     i32.const 2
     i32.shl
     i32.add
@@ -7423,41 +7762,77 @@
      call $~lib/rt/pure/__retain
      local.set $3
      local.get $2
-     call $~lib/rt/pure/__release
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $2
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
     local.get $3
     if
+     local.get $1
+     i32.const 6176
+     local.get $1
+     select
      local.get $3
      call $~lib/rt/pure/__retain
+     local.tee $6
+     call $~lib/string/String#concat
      local.tee $2
+     local.set $8
      local.get $1
      local.get $2
-     call $~lib/string/String.__concat
-     local.tee $9
-     local.tee $2
-     local.get $1
      i32.ne
      if
       local.get $2
       call $~lib/rt/pure/__retain
       local.set $2
       local.get $1
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $6
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $6
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $8
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $8
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     call $~lib/rt/pure/__release
-     local.get $9
-     call $~lib/rt/pure/__release
      local.get $2
      local.set $1
     end
-    local.get $8
+    local.get $9
     if
      local.get $1
      local.tee $2
-     local.get $4
-     call $~lib/string/String.__concat
-     local.tee $7
+     i32.const 6176
+     local.get $1
+     select
+     local.get $5
+     call $~lib/string/String#concat
      local.tee $1
+     local.set $6
+     local.get $1
      local.get $2
      i32.ne
      if
@@ -7465,20 +7840,34 @@
       call $~lib/rt/pure/__retain
       local.set $1
       local.get $2
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $2
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $6
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $6
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $7
-     call $~lib/rt/pure/__release
     end
-    local.get $5
+    local.get $4
     i32.const 1
     i32.add
-    local.set $5
+    local.set $4
     br $for-loop|0
    end
   end
   local.get $0
-  local.get $6
+  local.get $7
   i32.const 2
   i32.shl
   i32.add
@@ -7491,44 +7880,75 @@
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   if
+   local.get $1
+   i32.const 6176
+   local.get $1
+   select
    local.get $2
    call $~lib/rt/pure/__retain
    local.tee $0
-   local.get $1
-   local.get $0
-   call $~lib/string/String.__concat
-   local.tee $0
+   call $~lib/string/String#concat
    local.tee $3
+   local.set $4
    local.get $1
+   local.get $3
    i32.ne
    if
     local.get $3
     call $~lib/rt/pure/__retain
     local.set $3
     local.get $1
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
    end
-   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $4
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
    local.set $1
   end
   local.get $2
-  call $~lib/rt/pure/__release
-  local.get $1
- )
- (func $~lib/array/Array<~lib/string/String | null>#join (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=12
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/util/string/joinReferenceArray<~lib/string/String | null>
  )
  (func $~lib/util/string/joinReferenceArray<std/array/Ref | null> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -7540,14 +7960,14 @@
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $5
+  local.tee $6
   i32.const 0
   i32.lt_s
   if
    i32.const 6064
    return
   end
-  local.get $5
+  local.get $6
   i32.eqz
   if
    local.get $0
@@ -7559,7 +7979,14 @@
     local.set $4
    end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    i32.const 7984
    i32.const 6064
    local.get $4
@@ -7568,12 +7995,14 @@
   end
   i32.const 6064
   local.set $1
-  i32.const 6304
-  call $~lib/string/String#get:length
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.set $7
   loop $for-loop|0
    local.get $4
-   local.get $5
+   local.get $6
    i32.lt_s
    if
     local.get $3
@@ -7591,26 +8020,51 @@
      call $~lib/rt/pure/__retain
      local.set $3
      local.get $2
-     call $~lib/rt/pure/__release
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $2
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
     local.get $3
     if
      local.get $1
+     i32.const 6176
      local.get $1
+     select
      i32.const 7984
-     call $~lib/string/String.__concat
-     local.tee $6
+     call $~lib/string/String#concat
      local.tee $2
+     local.set $5
+     local.get $1
+     local.get $2
      i32.ne
      if
       local.get $2
       call $~lib/rt/pure/__retain
       local.set $2
       local.get $1
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $6
-     call $~lib/rt/pure/__release
      local.get $2
      local.set $1
     end
@@ -7618,10 +8072,14 @@
     if
      local.get $1
      local.tee $2
+     i32.const 6176
+     local.get $1
+     select
      i32.const 6304
-     call $~lib/string/String.__concat
-     local.tee $6
+     call $~lib/string/String#concat
      local.tee $1
+     local.set $5
+     local.get $1
      local.get $2
      i32.ne
      if
@@ -7629,10 +8087,24 @@
       call $~lib/rt/pure/__retain
       local.set $1
       local.get $2
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $2
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $6
-     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -7641,54 +8113,79 @@
     br $for-loop|0
    end
   end
-  local.get $3
   local.get $0
-  local.get $5
+  local.get $6
   i32.const 2
   i32.shl
   i32.add
   i32.load
   local.tee $2
+  local.get $3
   i32.ne
   if
    local.get $2
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   if
    local.get $1
+   i32.const 6176
    local.get $1
+   select
    i32.const 7984
-   call $~lib/string/String.__concat
-   local.tee $0
+   call $~lib/string/String#concat
    local.tee $3
+   local.set $0
+   local.get $1
+   local.get $3
    i32.ne
    if
     local.get $3
     call $~lib/rt/pure/__retain
     local.set $3
     local.get $1
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
    end
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
    local.set $1
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
  )
- (func $~lib/array/Array<std/array/Ref | null>#join (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=12
-  call $~lib/util/string/joinReferenceArray<std/array/Ref | null>
- )
  (func $~lib/util/number/itoa_stream<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   local.get $1
@@ -7752,7 +8249,7 @@
   local.get $0
   local.get $2
   local.get $1
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $1
  )
  (func $~lib/util/string/joinIntegerArray<i8> (param $0 i32) (param $1 i32) (result i32)
@@ -7780,8 +8277,10 @@
    return
   end
   local.get $3
-  i32.const 6304
-  call $~lib/string/String#get:length
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 11
   i32.add
@@ -7791,8 +8290,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -7821,7 +8325,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -7851,7 +8355,14 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
@@ -7888,7 +8399,7 @@
   local.get $0
   local.get $2
   local.get $1
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $1
  )
  (func $~lib/util/string/joinIntegerArray<u16> (param $0 i32) (param $1 i32) (result i32)
@@ -7916,8 +8427,10 @@
    return
   end
   local.get $3
-  i32.const 6304
-  call $~lib/string/String#get:length
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 10
   i32.add
@@ -7927,8 +8440,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -7959,7 +8477,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -7991,7 +8509,14 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
@@ -8042,7 +8567,7 @@
   i64.lt_u
   select
  )
- (func $~lib/util/number/utoa_simple<u64> (param $0 i32) (param $1 i64) (param $2 i32)
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -8104,14 +8629,14 @@
    local.get $0
    local.get $3
    local.get $1
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    local.get $2
    local.get $2
    call $~lib/util/number/decimalCount64High
    local.tee $1
-   call $~lib/util/number/utoa_simple<u64>
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
  )
@@ -8154,24 +8679,34 @@
      local.tee $2
      i32.const 1
      i32.shl
+     local.set $0
+     call $~lib/rt/tlsf/maybeInitialize
+     local.get $0
      i32.const 1
-     call $~lib/rt/tlsf/__alloc
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
      local.tee $0
      local.get $1
      local.get $2
-     call $~lib/util/number/utoa_simple<u32>
+     call $~lib/util/number/utoa32_core
     else
      local.get $4
      call $~lib/util/number/decimalCount64High
      local.tee $1
      i32.const 1
      i32.shl
+     local.set $0
+     call $~lib/rt/tlsf/maybeInitialize
+     local.get $0
      i32.const 1
-     call $~lib/rt/tlsf/__alloc
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
      local.tee $0
      local.get $4
      local.get $1
-     call $~lib/util/number/utoa_simple<u64>
+     call $~lib/util/number/utoa64_core
     end
     local.get $0
     call $~lib/rt/pure/__retain
@@ -8179,8 +8714,10 @@
    return
   end
   local.get $3
-  i32.const 6304
-  call $~lib/string/String#get:length
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $5
   i32.const 20
   i32.add
@@ -8190,8 +8727,13 @@
   local.tee $7
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -8222,7 +8764,7 @@
      local.get $5
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $5
      i32.add
@@ -8254,12 +8796,94 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/util/number/itoa_stream<i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
+ (func $~lib/util/number/itoa64 (param $0 i64) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i64.eqz
+  if
+   i32.const 6416
+   return
+  end
+  local.get $0
+  i64.const 63
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $2
+  if
+   i64.const 0
+   local.get $0
+   i64.sub
+   local.set $0
+  end
+  local.get $0
+  i64.const 4294967295
+  i64.le_u
+  if
+   local.get $0
+   i32.wrap_i64
+   local.tee $3
+   call $~lib/util/number/decimalCount32
+   local.get $2
+   i32.add
+   local.tee $4
+   i32.const 1
+   i32.shl
+   local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $1
+   i32.const 1
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $1
+   local.get $3
+   local.get $4
+   call $~lib/util/number/utoa32_core
+  else
+   local.get $0
+   call $~lib/util/number/decimalCount64High
+   local.get $2
+   i32.add
+   local.tee $3
+   i32.const 1
+   i32.shl
+   local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $1
+   i32.const 1
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $1
+   local.get $0
+   local.get $3
+   call $~lib/util/number/utoa64_core
+  end
+  local.get $2
+  if
+   local.get $1
+   i32.const 45
+   i32.store16
+  end
+  local.get $1
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/util/number/itoa_stream<i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
   (local $3 i32)
   local.get $1
   i32.const 1
@@ -8312,7 +8936,7 @@
    local.get $1
    local.get $3
    local.get $0
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
   else
    local.get $1
    local.get $2
@@ -8321,119 +8945,66 @@
    local.get $0
    i32.add
    local.tee $0
-   call $~lib/util/number/utoa_simple<u64>
+   call $~lib/util/number/utoa64_core
   end
   local.get $0
  )
  (func $~lib/util/string/joinIntegerArray<i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $4
+  local.tee $3
   i32.const 0
   i32.lt_s
   if
    i32.const 6064
    return
   end
-  local.get $4
+  local.get $3
   i32.eqz
   if
-   block $__inlined_func$~lib/util/number/itoa64 (result i32)
-    i32.const 6416
-    local.get $0
-    i64.load
-    local.tee $3
-    i64.eqz
-    br_if $__inlined_func$~lib/util/number/itoa64
-    drop
-    local.get $3
-    i64.const 63
-    i64.shr_u
-    i32.wrap_i64
-    local.tee $0
-    if
-     i64.const 0
-     local.get $3
-     i64.sub
-     local.set $3
-    end
-    local.get $3
-    i64.const 4294967295
-    i64.le_u
-    if
-     local.get $3
-     i32.wrap_i64
-     local.tee $2
-     call $~lib/util/number/decimalCount32
-     local.get $0
-     i32.add
-     local.tee $4
-     i32.const 1
-     i32.shl
-     i32.const 1
-     call $~lib/rt/tlsf/__alloc
-     local.tee $1
-     local.get $2
-     local.get $4
-     call $~lib/util/number/utoa_simple<u32>
-    else
-     local.get $3
-     call $~lib/util/number/decimalCount64High
-     local.get $0
-     i32.add
-     local.tee $2
-     i32.const 1
-     i32.shl
-     i32.const 1
-     call $~lib/rt/tlsf/__alloc
-     local.tee $1
-     local.get $3
-     local.get $2
-     call $~lib/util/number/utoa_simple<u64>
-    end
-    local.get $0
-    if
-     local.get $1
-     i32.const 45
-     i32.store16
-    end
-    local.get $1
-    call $~lib/rt/pure/__retain
-   end
+   local.get $0
+   i64.load
+   call $~lib/util/number/itoa64
    return
   end
-  local.get $4
-  i32.const 6304
-  call $~lib/string/String#get:length
-  local.tee $5
+  local.get $3
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.tee $4
   i32.const 21
   i32.add
   i32.mul
   i32.const 21
   i32.add
-  local.tee $7
+  local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
-   local.get $6
-   local.get $4
+   local.get $5
+   local.get $3
    i32.lt_s
    if
     local.get $1
     local.get $2
     local.get $0
-    local.get $6
+    local.get $5
     i32.const 3
     i32.shl
     i32.add
@@ -8442,7 +9013,7 @@
     local.get $2
     i32.add
     local.set $2
-    local.get $5
+    local.get $4
     if
      local.get $1
      local.get $2
@@ -8450,27 +9021,27 @@
      i32.shl
      i32.add
      i32.const 6304
-     local.get $5
+     local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
-     local.get $5
+     local.get $4
      i32.add
      local.set $2
     end
-    local.get $6
+    local.get $5
     i32.const 1
     i32.add
-    local.set $6
+    local.set $5
     br $for-loop|0
    end
   end
-  local.get $7
+  local.get $6
   local.get $1
   local.get $2
   local.get $0
-  local.get $4
+  local.get $3
   i32.const 3
   i32.shl
   i32.add
@@ -8485,7 +9056,14 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
@@ -8501,14 +9079,14 @@
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $5
+  local.tee $6
   i32.const 0
   i32.lt_s
   if
    i32.const 6064
    return
   end
-  local.get $5
+  local.get $6
   i32.eqz
   if
    local.get $0
@@ -8522,23 +9100,35 @@
    local.get $4
    if (result i32)
     local.get $4
+    i32.load offset=4
+    local.get $4
+    i32.load offset=12
     i32.const 6304
-    call $~lib/array/Array<i32>#join
+    call $~lib/util/string/joinIntegerArray<i32>
    else
     i32.const 6064
    end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 6064
   local.set $1
-  i32.const 6304
-  call $~lib/string/String#get:length
-  local.set $7
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.set $8
   loop $for-loop|0
    local.get $4
-   local.get $5
+   local.get $6
    i32.lt_s
    if
     local.get $3
@@ -8556,19 +9146,33 @@
      call $~lib/rt/pure/__retain
      local.set $3
      local.get $2
-     call $~lib/rt/pure/__release
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $2
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
     local.get $3
     if
      local.get $3
+     i32.load offset=4
+     local.get $3
+     i32.load offset=12
      i32.const 6304
-     call $~lib/array/Array<i32>#join
+     call $~lib/util/string/joinIntegerArray<i32>
      local.tee $2
+     local.set $7
      local.get $1
      local.get $1
+     i32.const 6176
+     local.get $1
+     select
      local.get $2
-     call $~lib/string/String.__concat
-     local.tee $8
+     call $~lib/string/String#concat
+     local.tee $5
      local.tee $2
      i32.ne
      if
@@ -8576,22 +9180,48 @@
       call $~lib/rt/pure/__retain
       local.set $2
       local.get $1
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $7
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $7
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     call $~lib/rt/pure/__release
-     local.get $8
-     call $~lib/rt/pure/__release
      local.get $2
      local.set $1
     end
-    local.get $7
+    local.get $8
     if
      local.get $1
      local.tee $2
+     i32.const 6176
+     local.get $1
+     select
      i32.const 6304
-     call $~lib/string/String.__concat
-     local.tee $6
+     call $~lib/string/String#concat
      local.tee $1
+     local.set $5
+     local.get $1
      local.get $2
      i32.ne
      if
@@ -8599,10 +9229,24 @@
       call $~lib/rt/pure/__retain
       local.set $1
       local.get $2
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $2
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $6
-     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -8612,7 +9256,7 @@
    end
   end
   local.get $0
-  local.get $5
+  local.get $6
   i32.const 2
   i32.shl
   i32.add
@@ -8625,36 +9269,80 @@
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   if
    local.get $2
+   i32.load offset=4
+   local.get $2
+   i32.load offset=12
    i32.const 6304
-   call $~lib/array/Array<i32>#join
-   local.tee $0
+   call $~lib/util/string/joinIntegerArray<i32>
+   local.tee $3
+   local.set $0
    local.get $1
+   i32.const 6176
    local.get $1
-   local.get $0
-   call $~lib/string/String.__concat
-   local.tee $0
+   select
+   local.get $3
+   call $~lib/string/String#concat
    local.tee $3
+   local.set $4
+   local.get $1
+   local.get $3
    i32.ne
    if
     local.get $3
     call $~lib/rt/pure/__retain
     local.set $3
     local.get $1
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
    end
-   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $4
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
    local.set $1
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
  )
  (func $~lib/util/number/itoa_stream<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -8689,7 +9377,7 @@
   local.get $0
   local.get $2
   local.get $1
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $1
  )
  (func $~lib/util/string/joinIntegerArray<u8> (param $0 i32) (param $1 i32) (result i32)
@@ -8717,8 +9405,10 @@
    return
   end
   local.get $3
-  i32.const 6304
-  call $~lib/string/String#get:length
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 10
   i32.add
@@ -8728,8 +9418,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -8758,7 +9453,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -8788,18 +9483,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/array/Array<u8>#toString (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=12
-  call $~lib/util/string/joinIntegerArray<u8>
- )
  (func $~lib/util/string/joinReferenceArray<~lib/array/Array<u8>> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -8811,14 +9506,14 @@
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $5
+  local.tee $6
   i32.const 0
   i32.lt_s
   if
    i32.const 6064
    return
   end
-  local.get $5
+  local.get $6
   i32.eqz
   if
    local.get $0
@@ -8832,22 +9527,34 @@
    local.get $4
    if (result i32)
     local.get $4
-    call $~lib/array/Array<u8>#toString
+    i32.load offset=4
+    local.get $4
+    i32.load offset=12
+    call $~lib/util/string/joinIntegerArray<u8>
    else
     i32.const 6064
    end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 6064
   local.set $1
-  i32.const 6304
-  call $~lib/string/String#get:length
-  local.set $7
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.set $8
   loop $for-loop|0
    local.get $4
-   local.get $5
+   local.get $6
    i32.lt_s
    if
     local.get $3
@@ -8865,17 +9572,32 @@
      call $~lib/rt/pure/__retain
      local.set $3
      local.get $2
-     call $~lib/rt/pure/__release
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $2
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
     local.get $3
     if
+     local.get $3
+     i32.load offset=4
+     local.get $3
+     i32.load offset=12
+     call $~lib/util/string/joinIntegerArray<u8>
+     local.tee $2
+     local.set $7
      local.get $1
      local.get $1
-     local.get $3
-     call $~lib/array/Array<u8>#toString
-     local.tee $6
-     call $~lib/string/String.__concat
-     local.tee $8
+     i32.const 6176
+     local.get $1
+     select
+     local.get $2
+     call $~lib/string/String#concat
+     local.tee $5
      local.tee $2
      i32.ne
      if
@@ -8883,23 +9605,48 @@
       call $~lib/rt/pure/__retain
       local.set $2
       local.get $1
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $7
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $7
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $6
-     call $~lib/rt/pure/__release
-     local.get $8
-     call $~lib/rt/pure/__release
      local.get $2
      local.set $1
     end
-    local.get $7
+    local.get $8
     if
      local.get $1
      local.tee $2
+     i32.const 6176
+     local.get $1
+     select
      i32.const 6304
-     call $~lib/string/String.__concat
-     local.tee $6
+     call $~lib/string/String#concat
      local.tee $1
+     local.set $5
+     local.get $1
      local.get $2
      i32.ne
      if
@@ -8907,10 +9654,24 @@
       call $~lib/rt/pure/__retain
       local.set $1
       local.get $2
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $2
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $6
-     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -8919,49 +9680,93 @@
     br $for-loop|0
    end
   end
-  local.get $3
   local.get $0
-  local.get $5
+  local.get $6
   i32.const 2
   i32.shl
   i32.add
   i32.load
   local.tee $2
+  local.get $3
   i32.ne
   if
    local.get $2
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   if
+   local.get $2
+   i32.load offset=4
+   local.get $2
+   i32.load offset=12
+   call $~lib/util/string/joinIntegerArray<u8>
+   local.tee $3
+   local.set $0
    local.get $1
+   i32.const 6176
    local.get $1
-   local.get $2
-   call $~lib/array/Array<u8>#toString
-   local.tee $0
-   call $~lib/string/String.__concat
-   local.tee $4
+   select
+   local.get $3
+   call $~lib/string/String#concat
    local.tee $3
+   local.set $4
+   local.get $1
+   local.get $3
    i32.ne
    if
     local.get $3
     call $~lib/rt/pure/__retain
     local.set $3
     local.get $1
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
    end
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
    local.set $1
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
  )
  (func $~lib/util/string/joinReferenceArray<~lib/array/Array<u32>> (param $0 i32) (param $1 i32) (result i32)
@@ -8975,14 +9780,14 @@
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $5
+  local.tee $6
   i32.const 0
   i32.lt_s
   if
    i32.const 6064
    return
   end
-  local.get $5
+  local.get $6
   i32.eqz
   if
    local.get $0
@@ -8996,23 +9801,35 @@
    local.get $4
    if (result i32)
     local.get $4
+    i32.load offset=4
+    local.get $4
+    i32.load offset=12
     i32.const 6304
-    call $~lib/array/Array<u32>#join
+    call $~lib/util/string/joinIntegerArray<u32>
    else
     i32.const 6064
    end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 6064
   local.set $1
-  i32.const 6304
-  call $~lib/string/String#get:length
-  local.set $7
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.set $8
   loop $for-loop|0
    local.get $4
-   local.get $5
+   local.get $6
    i32.lt_s
    if
     local.get $3
@@ -9030,19 +9847,33 @@
      call $~lib/rt/pure/__retain
      local.set $3
      local.get $2
-     call $~lib/rt/pure/__release
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $2
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
     local.get $3
     if
      local.get $3
+     i32.load offset=4
+     local.get $3
+     i32.load offset=12
      i32.const 6304
-     call $~lib/array/Array<u32>#join
+     call $~lib/util/string/joinIntegerArray<u32>
      local.tee $2
+     local.set $7
      local.get $1
      local.get $1
+     i32.const 6176
+     local.get $1
+     select
      local.get $2
-     call $~lib/string/String.__concat
-     local.tee $8
+     call $~lib/string/String#concat
+     local.tee $5
      local.tee $2
      i32.ne
      if
@@ -9050,22 +9881,48 @@
       call $~lib/rt/pure/__retain
       local.set $2
       local.get $1
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $7
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $7
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     call $~lib/rt/pure/__release
-     local.get $8
-     call $~lib/rt/pure/__release
      local.get $2
      local.set $1
     end
-    local.get $7
+    local.get $8
     if
      local.get $1
      local.tee $2
+     i32.const 6176
+     local.get $1
+     select
      i32.const 6304
-     call $~lib/string/String.__concat
-     local.tee $6
+     call $~lib/string/String#concat
      local.tee $1
+     local.set $5
+     local.get $1
      local.get $2
      i32.ne
      if
@@ -9073,12 +9930,26 @@
       call $~lib/rt/pure/__retain
       local.set $1
       local.get $2
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $2
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
      end
-     local.get $6
-     call $~lib/rt/pure/__release
-    end
-    local.get $4
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+    end
+    local.get $4
     i32.const 1
     i32.add
     local.set $4
@@ -9086,7 +9957,7 @@
    end
   end
   local.get $0
-  local.get $5
+  local.get $6
   i32.const 2
   i32.shl
   i32.add
@@ -9099,45 +9970,82 @@
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   if
    local.get $2
+   i32.load offset=4
+   local.get $2
+   i32.load offset=12
    i32.const 6304
-   call $~lib/array/Array<u32>#join
-   local.tee $0
+   call $~lib/util/string/joinIntegerArray<u32>
+   local.tee $3
+   local.set $0
    local.get $1
+   i32.const 6176
    local.get $1
-   local.get $0
-   call $~lib/string/String.__concat
-   local.tee $0
+   select
+   local.get $3
+   call $~lib/string/String#concat
    local.tee $3
+   local.set $4
+   local.get $1
+   local.get $3
    i32.ne
    if
     local.get $3
     call $~lib/rt/pure/__retain
     local.set $3
     local.get $1
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
    end
-   call $~lib/rt/pure/__release
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $4
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
    local.set $1
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
  )
- (func $~lib/array/Array<~lib/array/Array<u32>>#toString (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=12
-  call $~lib/util/string/joinReferenceArray<~lib/array/Array<u32>>
- )
  (func $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array<u32>>> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -9149,14 +10057,14 @@
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $5
+  local.tee $6
   i32.const 0
   i32.lt_s
   if
    i32.const 6064
    return
   end
-  local.get $5
+  local.get $6
   i32.eqz
   if
    local.get $0
@@ -9170,22 +10078,34 @@
    local.get $4
    if (result i32)
     local.get $4
-    call $~lib/array/Array<~lib/array/Array<u32>>#toString
+    i32.load offset=4
+    local.get $4
+    i32.load offset=12
+    call $~lib/util/string/joinReferenceArray<~lib/array/Array<u32>>
    else
     i32.const 6064
    end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 6064
   local.set $1
-  i32.const 6304
-  call $~lib/string/String#get:length
-  local.set $7
+  i32.const 6300
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.set $8
   loop $for-loop|0
    local.get $4
-   local.get $5
+   local.get $6
    i32.lt_s
    if
     local.get $3
@@ -9203,17 +10123,32 @@
      call $~lib/rt/pure/__retain
      local.set $3
      local.get $2
-     call $~lib/rt/pure/__release
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $2
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
     local.get $3
     if
+     local.get $3
+     i32.load offset=4
+     local.get $3
+     i32.load offset=12
+     call $~lib/util/string/joinReferenceArray<~lib/array/Array<u32>>
+     local.tee $2
+     local.set $7
      local.get $1
      local.get $1
-     local.get $3
-     call $~lib/array/Array<~lib/array/Array<u32>>#toString
-     local.tee $6
-     call $~lib/string/String.__concat
-     local.tee $8
+     i32.const 6176
+     local.get $1
+     select
+     local.get $2
+     call $~lib/string/String#concat
+     local.tee $5
      local.tee $2
      i32.ne
      if
@@ -9221,23 +10156,48 @@
       call $~lib/rt/pure/__retain
       local.set $2
       local.get $1
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $7
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $7
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $6
-     call $~lib/rt/pure/__release
-     local.get $8
-     call $~lib/rt/pure/__release
      local.get $2
      local.set $1
     end
-    local.get $7
+    local.get $8
     if
      local.get $1
      local.tee $2
+     i32.const 6176
+     local.get $1
+     select
      i32.const 6304
-     call $~lib/string/String.__concat
-     local.tee $6
+     call $~lib/string/String#concat
      local.tee $1
+     local.set $5
+     local.get $1
      local.get $2
      i32.ne
      if
@@ -9245,10 +10205,24 @@
       call $~lib/rt/pure/__retain
       local.set $1
       local.get $2
-      call $~lib/rt/pure/__release
+      i32.const 9744
+      i32.gt_u
+      if
+       local.get $2
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+     local.get $5
+     i32.const 9744
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
      end
-     local.get $6
-     call $~lib/rt/pure/__release
     end
     local.get $4
     i32.const 1
@@ -9257,49 +10231,93 @@
     br $for-loop|0
    end
   end
-  local.get $3
   local.get $0
-  local.get $5
+  local.get $6
   i32.const 2
   i32.shl
   i32.add
   i32.load
   local.tee $2
+  local.get $3
   i32.ne
   if
    local.get $2
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $2
   if
+   local.get $2
+   i32.load offset=4
+   local.get $2
+   i32.load offset=12
+   call $~lib/util/string/joinReferenceArray<~lib/array/Array<u32>>
+   local.tee $3
+   local.set $0
    local.get $1
+   i32.const 6176
    local.get $1
-   local.get $2
-   call $~lib/array/Array<~lib/array/Array<u32>>#toString
-   local.tee $0
-   call $~lib/string/String.__concat
-   local.tee $4
+   select
+   local.get $3
+   call $~lib/string/String#concat
    local.tee $3
+   local.set $4
+   local.get $1
+   local.get $3
    i32.ne
    if
     local.get $3
     call $~lib/rt/pure/__retain
     local.set $3
     local.get $1
-    call $~lib/rt/pure/__release
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
    end
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
    local.set $1
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
  )
  (func $~lib/array/Array<~lib/array/Array<i32>>#flat (param $0 i32) (result i32)
@@ -9343,27 +10361,33 @@
     br $for-loop|0
    end
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $2
   i32.const 2
   i32.shl
   local.tee $1
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $3
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
-  local.tee $0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $3
   local.get $2
   i32.store offset=12
-  local.get $0
+  local.get $3
   local.get $1
   i32.store offset=8
-  local.get $0
   local.get $3
-  i32.store offset=4
   local.get $0
+  i32.store offset=4
   local.get $3
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   i32.const 0
@@ -9381,7 +10405,7 @@
     i32.load
     local.tee $2
     if
-     local.get $3
+     local.get $0
      local.get $4
      i32.add
      local.get $2
@@ -9389,7 +10413,7 @@
      local.get $2
      i32.load offset=8
      local.tee $2
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -9402,7 +10426,7 @@
     br $for-loop|1
    end
   end
-  local.get $0
+  local.get $3
   call $~lib/rt/pure/__retain
  )
  (func $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#flat (param $0 i32) (result i32)
@@ -9447,16 +10471,22 @@
     br $for-loop|0
    end
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $2
   i32.const 2
   i32.shl
   local.tee $1
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 15
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $2
   i32.store offset=12
@@ -9493,7 +10523,7 @@
      local.get $4
      i32.load offset=8
      local.tee $4
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $4
      local.get $5
      i32.add
@@ -9546,8 +10576,8 @@
   (local $11 i32)
   (local $12 i32)
   (local $13 i32)
-  (local $14 f32)
-  (local $15 f64)
+  (local $14 i32)
+  (local $15 i32)
   (local $16 i32)
   (local $17 i32)
   (local $18 i32)
@@ -9560,16 +10590,16 @@
   (local $25 i32)
   (local $26 i32)
   (local $27 i32)
-  (local $28 i32)
-  (local $29 i32)
+  (local $28 f64)
+  (local $29 f32)
   (local $30 i32)
   (local $31 i32)
   (local $32 i32)
   (local $33 i32)
-  (local $34 f32)
-  (local $35 f64)
-  (local $36 i32)
-  (local $37 i32)
+  (local $34 i32)
+  (local $35 i32)
+  (local $36 f64)
+  (local $37 f32)
   (local $38 i32)
   (local $39 i32)
   (local $40 i32)
@@ -9599,56 +10629,73 @@
   global.set $std/array/arr
   i32.const 0
   call $std/array/Ref#constructor
+  local.set $60
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.set $1
+  local.set $57
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 1
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
   i32.const 0
   i32.const 1
-  call $~lib/memory/memory.fill
-  local.get $1
+  call $~lib/util/memory/memset
+  local.get $57
   i32.eqz
   if
+   call $~lib/rt/tlsf/maybeInitialize
    i32.const 12
    i32.const 2
-   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    call $~lib/rt/pure/__retain
-   local.set $1
+   local.set $57
   end
-  local.get $1
+  local.get $57
   i32.const 0
   i32.store
-  local.get $1
+  local.get $57
   i32.const 0
   i32.store offset=4
-  local.get $1
+  local.get $57
   i32.const 0
   i32.store offset=8
-  local.get $2
-  local.tee $0
-  local.get $1
+  local.get $0
+  local.tee $1
+  local.get $57
   i32.load
-  local.tee $4
+  local.tee $61
   i32.ne
   if
-   local.get $0
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $0
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $61
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $61
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $57
   local.get $1
-  local.get $0
   i32.store
-  local.get $1
-  local.get $2
+  local.get $57
+  local.get $0
   i32.store offset=4
-  local.get $1
+  local.get $57
   i32.const 1
   i32.store offset=8
   global.get $std/array/arr
@@ -9661,29 +10708,52 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $57
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 5
   i32.const 0
   i32.const 6
   i32.const 1440
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $59
   i32.const 1
   i32.const 1
   i32.const 3
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 0
   i32.const 6
   i32.const 1472
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $1
+  local.tee $58
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
@@ -9694,20 +10764,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 0
   i32.const 0
   i32.const 2147483647
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 0
   i32.const 6
   i32.const 1568
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $2
+  local.tee $60
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
@@ -9718,20 +10796,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 1
   i32.const 0
   i32.const -3
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 0
   i32.const 6
   i32.const 1600
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $3
+  local.tee $61
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
@@ -9742,20 +10828,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 2
   i32.const -2
   i32.const 2147483647
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 0
   i32.const 6
   i32.const 1632
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $4
+  local.tee $0
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
@@ -9766,20 +10860,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 0
   i32.const 1
   i32.const 0
   call $~lib/array/Array<u8>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 0
   i32.const 6
   i32.const 1664
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $5
+  local.tee $1
   call $std/array/isArraysEqual<u8>
   i32.eqz
   if
@@ -9790,38 +10892,88 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 5
   i32.const 2
   i32.const 7
   i32.const 1696
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $59
   i32.const 1
   i32.const 1
   i32.const 3
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 2
   i32.const 7
   i32.const 1744
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $1
+  local.tee $58
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -9833,20 +10985,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 0
   i32.const 0
   i32.const 2147483647
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 2
   i32.const 7
   i32.const 1792
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $2
+  local.tee $60
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -9858,20 +11018,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 1
   i32.const 0
   i32.const -3
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 2
   i32.const 7
   i32.const 1840
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $3
+  local.tee $61
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -9883,20 +11051,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 2
   i32.const -2
   i32.const 2147483647
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 2
   i32.const 7
   i32.const 1888
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $4
+  local.tee $0
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -9908,20 +11084,28 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 0
   i32.const 1
   i32.const 0
   call $~lib/array/Array<u32>#fill
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 2
   i32.const 7
   i32.const 1936
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $5
+  local.tee $1
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -9933,32 +11117,79 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  global.get $std/array/arr
-  i32.load offset=12
+  local.get $59
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 97
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
-  if
-   i32.const 0
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $std/array/arr
+  i32.load offset=12
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 97
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/array/arr
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
+  if
+   i32.const 0
    i32.const 1296
    i32.const 98
    i32.const 3
@@ -9994,7 +11225,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 1
   i32.ne
   if
@@ -10028,7 +11264,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 1
   i32.ne
   if
@@ -10055,7 +11296,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 1
   i32.ne
   if
@@ -10095,7 +11341,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 2
   i32.ne
   if
@@ -10148,7 +11399,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 3
   i32.ne
   if
@@ -10204,7 +11460,7 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $60
   i32.load offset=4
   local.tee $1
   i32.const 0
@@ -10214,41 +11470,49 @@
   i32.const 0
   call $std/array/Ref#constructor
   i32.store offset=4
-  local.get $0
+  local.get $60
   i32.load offset=12
-  local.tee $2
+  local.tee $0
   i32.const 0
   i32.gt_s
   if
-   local.get $0
+   local.get $60
    i32.load offset=4
    local.tee $1
-   local.get $2
+   local.get $0
    i32.const 2
    i32.shl
    i32.add
-   local.set $2
+   local.set $61
    loop $do-continue|0
     local.get $1
     i32.load
-    call $~lib/rt/pure/__release
+    local.tee $0
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $0
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     i32.const 4
     i32.add
     local.tee $1
-    local.get $2
+    local.get $61
     i32.lt_u
     br_if $do-continue|0
    end
   else
-   local.get $0
+   local.get $60
    i32.const 0
    call $~lib/array/ensureSize
   end
-  local.get $0
+  local.get $60
   i32.const 0
   i32.store offset=12
-  local.get $0
+  local.get $60
   i32.load offset=12
   if
    i32.const 0
@@ -10258,17 +11522,29 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/pure/__release
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   call $~lib/array/Array<i32>#constructor
-  local.set $1
+  local.set $60
   global.get $std/array/arr
-  local.get $1
+  local.get $60
   call $~lib/array/Array<i32>#concat
-  local.set $2
+  local.set $61
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 3
   i32.ne
   if
@@ -10291,7 +11567,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $61
   i32.load offset=12
   i32.const 3
   i32.ne
@@ -10303,18 +11579,31 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $61
   i32.const 0
   i32.const 2
   i32.const 3
   i32.const 2032
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $4
+  local.tee $0
   call $~lib/array/Array<i32>#concat
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 3
   i32.ne
   if
@@ -10325,7 +11614,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $61
   i32.const 0
   call $~lib/array/Array<u32>#__get
   i32.const 43
@@ -10338,7 +11627,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $61
   i32.const 1
   call $~lib/array/Array<u32>#__get
   i32.const 44
@@ -10351,7 +11640,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $61
   i32.const 2
   call $~lib/array/Array<u32>#__get
   i32.const 45
@@ -10364,20 +11653,32 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $60
   i32.const 46
   call $~lib/array/Array<i32>#push
-  local.get $1
+  local.get $60
   i32.const 47
   call $~lib/array/Array<i32>#push
   global.get $std/array/arr
-  local.get $1
+  local.get $60
   call $~lib/array/Array<i32>#concat
-  local.set $0
-  local.get $2
-  call $~lib/rt/pure/__release
+  local.set $58
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 3
   i32.ne
   if
@@ -10388,7 +11689,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $60
   i32.load offset=12
   i32.const 2
   i32.ne
@@ -10400,7 +11701,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $58
   i32.load offset=12
   i32.const 5
   i32.ne
@@ -10412,7 +11713,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $58
   i32.const 0
   call $~lib/array/Array<u32>#__get
   i32.const 43
@@ -10425,7 +11726,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $58
   i32.const 1
   call $~lib/array/Array<u32>#__get
   i32.const 44
@@ -10438,7 +11739,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $58
   i32.const 2
   call $~lib/array/Array<u32>#__get
   i32.const 45
@@ -10451,7 +11752,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $58
   i32.const 3
   call $~lib/array/Array<u32>#__get
   i32.const 46
@@ -10464,7 +11765,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $58
   i32.const 4
   call $~lib/array/Array<u32>#__get
   i32.const 47
@@ -10477,10 +11778,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $58
   call $~lib/array/Array<i32>#pop
   drop
-  local.get $0
+  local.get $58
   i32.load offset=12
   i32.const 4
   i32.ne
@@ -10498,7 +11799,7 @@
   i32.const 2048
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $2
+  local.tee $61
   i32.load offset=12
   if
    i32.const 0
@@ -10508,13 +11809,20 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $61
   global.get $std/array/arr
   call $~lib/array/Array<i32>#concat
-  local.set $3
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $3
+  local.set $1
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
   i32.load offset=12
   i32.const 3
   i32.ne
@@ -10526,7 +11834,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $61
   i32.load offset=12
   if
    i32.const 0
@@ -10536,14 +11844,42 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 5
   i32.const 2
   i32.const 3
@@ -10555,14 +11891,14 @@
   i32.const 3
   i32.const 2147483647
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $2
+  local.tee $43
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2112
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $3
+  local.tee $42
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10580,22 +11916,29 @@
   i32.const 2160
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $0
+  local.set $61
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
   i32.const 1
   i32.const 3
   i32.const 2147483647
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $4
+  local.tee $41
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2208
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $5
+  local.tee $40
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10613,22 +11956,29 @@
   i32.const 2256
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $1
+  local.set $0
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
   i32.const 1
   i32.const 2
   i32.const 2147483647
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $16
+  local.tee $39
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2304
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $20
+  local.tee $38
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10646,21 +11996,28 @@
   i32.const 2352
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.tee $1
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 2
   i32.const 2
   i32.const 2147483647
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $25
+  local.tee $54
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2400
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $6
+  local.tee $53
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10678,21 +12035,28 @@
   i32.const 2448
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.tee $1
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 0
   i32.const 3
   i32.const 4
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $8
+  local.tee $51
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2496
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $9
+  local.tee $44
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10710,21 +12074,28 @@
   i32.const 2544
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.tee $1
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 1
   i32.const 3
   i32.const 4
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $11
+  local.tee $55
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2592
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $13
+  local.tee $52
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10742,21 +12113,28 @@
   i32.const 2640
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.tee $1
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 1
   i32.const 2
   i32.const 4
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $30
+  local.tee $50
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2688
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $17
+  local.tee $49
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10774,21 +12152,28 @@
   i32.const 2736
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.tee $1
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 0
   i32.const -2
   i32.const 2147483647
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $18
+  local.tee $48
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2784
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $19
+  local.tee $47
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10806,21 +12191,28 @@
   i32.const 2832
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.tee $1
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 0
   i32.const -2
   i32.const -1
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $12
+  local.tee $46
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2880
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $21
+  local.tee $45
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10838,22 +12230,28 @@
   i32.const 2928
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
   local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const -4
   i32.const -3
   i32.const -2
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $22
+  local.tee $57
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 2976
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $23
+  local.tee $59
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10871,22 +12269,28 @@
   i32.const 3024
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const -4
   i32.const -3
   i32.const -1
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $24
+  local.tee $58
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 3072
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $26
+  local.tee $60
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10904,22 +12308,29 @@
   i32.const 3120
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
+  local.set $1
   local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
   i32.const -4
   i32.const -3
   i32.const 2147483647
   call $~lib/array/Array<i32>#copyWithin
-  local.tee $1
+  local.tee $61
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 3168
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $27
+  local.tee $0
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -10931,115 +12342,295 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $16
-  call $~lib/rt/pure/__release
-  local.get $20
-  call $~lib/rt/pure/__release
-  local.get $25
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $9
-  call $~lib/rt/pure/__release
-  local.get $11
-  call $~lib/rt/pure/__release
-  local.get $13
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
-  local.get $17
-  call $~lib/rt/pure/__release
-  local.get $18
-  call $~lib/rt/pure/__release
-  local.get $19
-  call $~lib/rt/pure/__release
-  local.get $12
-  call $~lib/rt/pure/__release
-  local.get $21
-  call $~lib/rt/pure/__release
-  local.get $22
-  call $~lib/rt/pure/__release
-  local.get $23
-  call $~lib/rt/pure/__release
-  local.get $24
-  call $~lib/rt/pure/__release
-  local.get $26
-  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $27
-  call $~lib/rt/pure/__release
-  global.get $std/array/arr
-  i32.const 42
-  call $~lib/array/Array<i32>#unshift
-  global.get $std/array/arr
-  i32.load offset=12
-  i32.const 4
-  i32.ne
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 222
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
-  i32.const 4
-  i32.ne
+  local.get $43
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 223
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $43
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  global.get $std/array/arr
-  i32.const 0
-  call $~lib/array/Array<u32>#__get
-  i32.const 42
-  i32.ne
+  local.get $42
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 224
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $42
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  global.get $std/array/arr
-  i32.const 1
-  call $~lib/array/Array<u32>#__get
-  i32.const 43
-  i32.ne
+  local.get $41
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 225
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $41
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  global.get $std/array/arr
-  i32.const 2
-  call $~lib/array/Array<u32>#__get
-  i32.const 44
-  i32.ne
-  if
+  local.get $40
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $40
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $39
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $39
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $38
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $38
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $54
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $54
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $53
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $53
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $51
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $51
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $44
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $44
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $55
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $55
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $52
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $52
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $50
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $50
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $49
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $49
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $48
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $48
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $47
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $47
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $46
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $46
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $45
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $45
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $57
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  global.get $std/array/arr
+  i32.const 42
+  call $~lib/array/Array<i32>#unshift
+  global.get $std/array/arr
+  i32.load offset=12
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 222
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/array/arr
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 223
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/array/arr
+  i32.const 0
+  call $~lib/array/Array<u32>#__get
+  i32.const 42
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 224
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/array/arr
+  i32.const 1
+  call $~lib/array/Array<u32>#__get
+  i32.const 43
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 225
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/array/arr
+  i32.const 2
+  call $~lib/array/Array<u32>#__get
+  i32.const 44
+  i32.ne
+  if
    i32.const 0
    i32.const 1296
    i32.const 226
@@ -11076,7 +12667,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 5
   i32.ne
   if
@@ -11153,9 +12749,9 @@
    unreachable
   end
   global.get $std/array/arr
-  local.tee $1
+  local.tee $60
   i32.load offset=12
-  local.tee $2
+  local.tee $1
   i32.const 1
   i32.lt_s
   if
@@ -11166,29 +12762,29 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $60
   i32.load offset=4
-  local.tee $0
+  local.tee $58
   i32.load
-  local.get $0
-  local.get $0
+  local.get $58
+  local.get $58
   i32.const 4
   i32.add
-  local.get $2
+  local.get $1
   i32.const 1
   i32.sub
-  local.tee $2
+  local.tee $0
   i32.const 2
   i32.shl
-  local.tee $4
-  call $~lib/memory/memory.copy
-  local.get $0
-  local.get $4
+  local.tee $1
+  call $~lib/util/memory/memmove
+  local.get $1
+  local.get $58
   i32.add
   i32.const 0
   i32.store
-  local.get $1
-  local.get $2
+  local.get $60
+  local.get $0
   i32.store offset=12
   global.set $std/array/i
   global.get $std/array/i
@@ -11215,7 +12811,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 5
   i32.ne
   if
@@ -11305,7 +12906,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 5
   i32.ne
   if
@@ -11356,16 +12962,16 @@
    unreachable
   end
   global.get $std/array/arr
-  local.tee $1
+  local.tee $61
   i32.load offset=12
-  local.tee $2
+  local.tee $1
   if
-   local.get $1
+   local.get $61
    i32.load offset=4
-   local.set $0
-   local.get $1
+   local.set $57
+   local.get $61
    i32.load offset=4
-   local.get $2
+   local.get $1
    i32.const 1
    i32.sub
    i32.const 2
@@ -11373,24 +12979,24 @@
    i32.add
    local.set $1
    loop $while-continue|0
-    local.get $0
+    local.get $57
     local.get $1
     i32.lt_u
     if
-     local.get $0
+     local.get $57
      i32.load
-     local.set $2
-     local.get $0
+     local.set $0
+     local.get $57
      local.get $1
      i32.load
      i32.store
      local.get $1
-     local.get $2
-     i32.store
      local.get $0
+     i32.store
+     local.get $57
      i32.const 4
      i32.add
-     local.set $0
+     local.set $57
      local.get $1
      i32.const 4
      i32.sub
@@ -11399,6 +13005,19 @@
     end
    end
   end
+  local.get $61
+  call $~lib/rt/pure/__retain
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/arr
   i32.load offset=12
   i32.const 3
@@ -11412,7 +13031,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 5
   i32.ne
   if
@@ -11632,36 +13256,36 @@
   i32.const 3216
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $1
-  local.set $4
+  local.tee $58
+  local.set $1
   i32.const 0
-  local.set $0
+  local.set $57
   block $__inlined_func$~lib/array/Array<f32>#indexOf
-   local.get $1
+   local.get $58
    i32.load offset=12
-   local.tee $2
+   local.tee $61
    if (result i32)
     i32.const 0
-    local.get $2
+    local.get $61
     i32.ge_s
    else
     i32.const 1
    end
    if
     i32.const -1
-    local.set $0
+    local.set $57
     br $__inlined_func$~lib/array/Array<f32>#indexOf
    end
-   local.get $4
+   local.get $1
    i32.load offset=4
-   local.set $3
-   loop $while-continue|022
-    local.get $0
-    local.get $2
+   local.set $1
+   loop $while-continue|084
+    local.get $57
+    local.get $61
     i32.lt_s
     if
-     local.get $3
-     local.get $0
+     local.get $1
+     local.get $57
      i32.const 2
      i32.shl
      i32.add
@@ -11669,17 +13293,17 @@
      f32.const nan:0x400000
      f32.eq
      br_if $__inlined_func$~lib/array/Array<f32>#indexOf
-     local.get $0
+     local.get $57
      i32.const 1
      i32.add
-     local.set $0
-     br $while-continue|022
+     local.set $57
+     br $while-continue|084
     end
    end
    i32.const -1
-   local.set $0
+   local.set $57
   end
-  local.get $0
+  local.get $57
   i32.const -1
   i32.ne
   if
@@ -11696,36 +13320,36 @@
   i32.const 3248
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $2
-  local.set $5
+  local.tee $60
+  local.set $1
   i32.const 0
-  local.set $0
+  local.set $57
   block $__inlined_func$~lib/array/Array<f64>#indexOf
-   local.get $2
+   local.get $60
    i32.load offset=12
-   local.tee $3
+   local.tee $61
    if (result i32)
     i32.const 0
-    local.get $3
+    local.get $61
     i32.ge_s
    else
     i32.const 1
    end
    if
     i32.const -1
-    local.set $0
+    local.set $57
     br $__inlined_func$~lib/array/Array<f64>#indexOf
    end
-   local.get $5
+   local.get $1
    i32.load offset=4
-   local.set $4
-   loop $while-continue|023
-    local.get $0
-    local.get $3
+   local.set $1
+   loop $while-continue|085
+    local.get $57
+    local.get $61
     i32.lt_s
     if
-     local.get $4
-     local.get $0
+     local.get $1
+     local.get $57
      i32.const 3
      i32.shl
      i32.add
@@ -11733,17 +13357,17 @@
      f64.const nan:0x8000000000000
      f64.eq
      br_if $__inlined_func$~lib/array/Array<f64>#indexOf
-     local.get $0
+     local.get $57
      i32.const 1
      i32.add
-     local.set $0
-     br $while-continue|023
+     local.set $57
+     br $while-continue|085
     end
    end
    i32.const -1
-   local.set $0
+   local.set $57
   end
-  local.get $0
+  local.get $57
   i32.const -1
   i32.ne
   if
@@ -11754,14 +13378,30 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/arr
   i32.const 44
   i32.const 0
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11775,7 +13415,9 @@
   global.get $std/array/arr
   i32.const 42
   i32.const 0
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11789,7 +13431,9 @@
   global.get $std/array/arr
   i32.const 45
   i32.const 0
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   if
    i32.const 0
    i32.const 1296
@@ -11801,7 +13445,9 @@
   global.get $std/array/arr
   i32.const 43
   i32.const 100
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   if
    i32.const 0
    i32.const 1296
@@ -11813,7 +13459,9 @@
   global.get $std/array/arr
   i32.const 43
   i32.const -100
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11827,7 +13475,9 @@
   global.get $std/array/arr
   i32.const 43
   i32.const -2
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11841,7 +13491,9 @@
   global.get $std/array/arr
   i32.const 43
   i32.const -4
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11855,7 +13507,9 @@
   global.get $std/array/arr
   i32.const 43
   i32.const 0
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11869,7 +13523,9 @@
   global.get $std/array/arr
   i32.const 43
   i32.const 1
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11883,7 +13539,9 @@
   global.get $std/array/arr
   i32.const 43
   i32.const 2
-  call $~lib/array/Array<i32>#includes
+  call $~lib/array/Array<i32>#indexOf
+  i32.const 0
+  i32.ge_s
   i32.const 1
   i32.ne
   if
@@ -11896,7 +13554,7 @@
   end
   block $__inlined_func$~lib/array/Array<f32>#includes (result i32)
    i32.const 0
-   local.set $0
+   local.set $1
    i32.const 0
    i32.const 1
    i32.const 2
@@ -11904,50 +13562,50 @@
    i32.const 3280
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $2
+   local.tee $59
    i32.load offset=12
-   local.tee $3
+   local.tee $60
    if (result i32)
     i32.const 0
-    local.get $3
+    local.get $60
     i32.ge_s
    else
     i32.const 1
    end
    br_if $__inlined_func$~lib/array/Array<f32>#includes
    drop
-   local.get $2
+   local.get $59
    i32.load offset=4
-   local.set $5
-   loop $while-continue|024
-    local.get $0
-    local.get $3
+   local.set $0
+   loop $while-continue|097
+    local.get $1
+    local.get $60
     i32.lt_s
     if
      i32.const 1
-     local.get $5
      local.get $0
+     local.get $1
      i32.const 2
      i32.shl
      i32.add
      f32.load
-     local.tee $14
+     local.tee $37
      f32.const nan:0x400000
      f32.eq
      if (result i32)
       i32.const 1
      else
-      local.get $14
-      local.get $14
+      local.get $37
+      local.get $37
       f32.ne
      end
      br_if $__inlined_func$~lib/array/Array<f32>#includes
      drop
-     local.get $0
+     local.get $1
      i32.const 1
      i32.add
-     local.set $0
-     br $while-continue|024
+     local.set $1
+     br $while-continue|097
     end
    end
    i32.const 0
@@ -11963,7 +13621,7 @@
   end
   block $__inlined_func$~lib/array/Array<f64>#includes (result i32)
    i32.const 0
-   local.set $1
+   local.set $57
    i32.const 0
    i32.const 1
    i32.const 3
@@ -11971,50 +13629,50 @@
    i32.const 3312
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $3
+   local.tee $58
    i32.load offset=12
-   local.tee $4
+   local.tee $61
    if (result i32)
     i32.const 0
-    local.get $4
+    local.get $61
     i32.ge_s
    else
     i32.const 1
    end
    br_if $__inlined_func$~lib/array/Array<f64>#includes
    drop
-   local.get $3
+   local.get $58
    i32.load offset=4
-   local.set $16
-   loop $while-continue|025
-    local.get $1
-    local.get $4
+   local.set $1
+   loop $while-continue|098
+    local.get $57
+    local.get $61
     i32.lt_s
     if
      i32.const 1
-     local.get $16
      local.get $1
+     local.get $57
      i32.const 3
      i32.shl
      i32.add
      f64.load
-     local.tee $15
+     local.tee $36
      f64.const nan:0x8000000000000
      f64.eq
      if (result i32)
       i32.const 1
      else
-      local.get $15
-      local.get $15
+      local.get $36
+      local.get $36
       f64.ne
      end
      br_if $__inlined_func$~lib/array/Array<f64>#includes
      drop
-     local.get $1
+     local.get $57
      i32.const 1
      i32.add
-     local.set $1
-     br $while-continue|025
+     local.set $57
+     br $while-continue|098
     end
    end
    i32.const 0
@@ -12032,7 +13690,15 @@
   i32.const 1
   i32.const 1
   call $~lib/array/Array<i32>#splice
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/arr
   i32.load offset=12
   i32.const 4
@@ -12046,7 +13712,12 @@
    unreachable
   end
   global.get $std/array/arr
-  call $std/array/internalCapacity<i32>
+  i32.load
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_s
   i32.const 5
   i32.ne
   if
@@ -12083,10 +13754,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 5
   i32.const 2
   i32.const 3
@@ -12097,14 +13782,14 @@
   i32.const 0
   i32.const 2147483647
   call $~lib/array/Array<i32>#splice
-  local.tee $3
+  local.tee $24
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 3392
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $4
+  local.tee $23
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12123,7 +13808,7 @@
   i32.const 3440
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $5
+  local.tee $22
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12143,19 +13828,26 @@
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   i32.const 0
   i32.const 0
   call $~lib/array/Array<i32>#splice
-  local.tee $6
+  local.tee $21
   i32.const 0
   i32.const 2
   i32.const 3
   i32.const 3504
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $8
+  local.tee $20
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12174,7 +13866,7 @@
   i32.const 3520
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $9
+  local.tee $19
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12194,19 +13886,26 @@
   call $~lib/rt/pure/__retain
   local.set $1
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 2
   i32.const 2147483647
   call $~lib/array/Array<i32>#splice
-  local.tee $11
+  local.tee $18
   i32.const 3
   i32.const 2
   i32.const 3
   i32.const 3616
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $13
+  local.tee $17
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12225,7 +13924,7 @@
   i32.const 3648
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $17
+  local.tee $16
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12243,21 +13942,28 @@
   i32.const 3680
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $2
+  local.set $0
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
   i32.const 2
   i32.const 2
   call $~lib/array/Array<i32>#splice
-  local.tee $18
+  local.tee $15
   i32.const 2
   i32.const 2
   i32.const 3
   i32.const 3728
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $19
+  local.tee $14
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12269,14 +13975,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $0
   i32.const 3
   i32.const 2
   i32.const 3
   i32.const 3760
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $12
+  local.tee $13
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12294,21 +14000,27 @@
   i32.const 3792
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $2
-  call $~lib/rt/pure/__release
   local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 0
   i32.const 1
   call $~lib/array/Array<i32>#splice
-  local.tee $21
+  local.tee $12
   i32.const 1
   i32.const 2
   i32.const 3
   i32.const 3840
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $22
+  local.tee $11
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12327,7 +14039,7 @@
   i32.const 3872
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $23
+  local.tee $10
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12346,19 +14058,26 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const -1
   i32.const 2147483647
   call $~lib/array/Array<i32>#splice
-  local.tee $24
+  local.tee $9
   i32.const 1
   i32.const 2
   i32.const 3
   i32.const 3952
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $26
+  local.tee $8
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12377,7 +14096,7 @@
   i32.const 3984
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $27
+  local.tee $7
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12396,19 +14115,26 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const -2
   i32.const 2147483647
   call $~lib/array/Array<i32>#splice
-  local.tee $31
+  local.tee $6
   i32.const 2
   i32.const 2
   i32.const 3
   i32.const 4064
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $32
+  local.tee $5
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12427,7 +14153,7 @@
   i32.const 4096
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $33
+  local.tee $4
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12446,19 +14172,26 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const -2
   i32.const 1
   call $~lib/array/Array<i32>#splice
-  local.tee $28
+  local.tee $3
   i32.const 1
   i32.const 2
   i32.const 3
   i32.const 4176
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $29
+  local.tee $2
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12477,7 +14210,7 @@
   i32.const 4208
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $36
+  local.tee $34
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12496,19 +14229,26 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const -7
   i32.const 1
   call $~lib/array/Array<i32>#splice
-  local.tee $37
+  local.tee $43
   i32.const 1
   i32.const 2
   i32.const 3
   i32.const 4288
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $38
+  local.tee $42
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12527,7 +14267,7 @@
   i32.const 4320
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $39
+  local.tee $41
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12546,7 +14286,14 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const -2
   i32.const -1
@@ -12558,7 +14305,7 @@
   i32.const 4400
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $41
+  local.tee $39
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12577,7 +14324,7 @@
   i32.const 4416
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $42
+  local.tee $38
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12596,19 +14343,26 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const 1
   i32.const -2
   call $~lib/array/Array<i32>#splice
-  local.tee $43
+  local.tee $54
   i32.const 0
   i32.const 2
   i32.const 3
   i32.const 4512
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $44
+  local.tee $53
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12627,7 +14381,7 @@
   i32.const 4528
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $45
+  local.tee $51
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12645,21 +14399,27 @@
   i32.const 4576
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 4
   i32.const 0
   call $~lib/array/Array<i32>#splice
-  local.tee $46
+  local.tee $44
   i32.const 0
   i32.const 2
   i32.const 3
   i32.const 4624
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $47
+  local.tee $55
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12671,14 +14431,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 4640
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $48
+  local.tee $52
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12696,21 +14456,28 @@
   i32.const 4688
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
+  local.set $1
   local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
   i32.const 7
   i32.const 0
   call $~lib/array/Array<i32>#splice
-  local.tee $49
+  local.tee $50
   i32.const 0
   i32.const 2
   i32.const 3
   i32.const 4736
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $50
+  local.tee $49
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12722,14 +14489,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $1
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 4752
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $51
+  local.tee $48
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12747,21 +14514,28 @@
   i32.const 4800
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  call $~lib/rt/pure/__release
+  local.set $30
   local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $30
   i32.const 7
   i32.const 5
   call $~lib/array/Array<i32>#splice
-  local.tee $52
+  local.tee $47
   i32.const 0
   i32.const 2
   i32.const 3
   i32.const 4848
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $53
+  local.tee $46
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12773,14 +14547,14 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $30
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 4864
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $54
+  local.tee $45
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -12798,10 +14572,10 @@
   i32.const 4912
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $2
+  local.tee $0
   i32.const 1
   call $~lib/array/Array<std/array/Ref>#splice
-  local.tee $20
+  local.tee $1
   i32.load offset=12
   if
    i32.const 0
@@ -12811,7 +14585,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $0
   i32.load offset=12
   if
    i32.const 0
@@ -12827,37 +14601,51 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $16
+  local.tee $33
   i32.load offset=4
-  local.tee $0
+  local.tee $61
   i32.const 1
   call $std/array/Ref#constructor
   i32.store
-  local.get $0
+  local.get $61
   i32.const 2
   call $std/array/Ref#constructor
   i32.store offset=4
-  local.get $0
+  local.get $61
   i32.const 3
   call $std/array/Ref#constructor
   i32.store offset=8
-  local.get $0
+  local.get $61
   i32.const 4
   call $std/array/Ref#constructor
   i32.store offset=12
-  local.get $0
+  local.get $61
   i32.const 5
   call $std/array/Ref#constructor
   i32.store offset=16
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $16
+  local.get $0
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $33
   i32.const 2
   call $~lib/array/Array<std/array/Ref>#splice
-  local.set $25
-  local.get $20
-  call $~lib/rt/pure/__release
-  local.get $25
+  local.set $31
+  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $31
   i32.load offset=12
   i32.const 2
   i32.ne
@@ -12869,10 +14657,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $25
+  local.get $31
   i32.const 0
   call $~lib/array/Array<std/array/Ref>#__get
-  local.tee $55
+  local.tee $57
   i32.load
   i32.const 3
   i32.ne
@@ -12884,10 +14672,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $25
+  local.get $31
   i32.const 1
   call $~lib/array/Array<std/array/Ref>#__get
-  local.tee $56
+  local.tee $59
   i32.load
   i32.const 4
   i32.ne
@@ -12899,272 +14687,629 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $16
-  i32.load offset=12
-  i32.const 3
-  i32.ne
+  local.get $33
+  i32.load offset=12
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 431
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $33
+  i32.const 0
+  call $~lib/array/Array<std/array/Ref>#__get
+  local.tee $58
+  i32.load
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 432
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $33
+  i32.const 1
+  call $~lib/array/Array<std/array/Ref>#__get
+  local.tee $60
+  i32.load
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 433
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $33
+  i32.const 2
+  call $~lib/array/Array<std/array/Ref>#__get
+  local.tee $61
+  i32.load
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 434
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3
+  i32.const 2
+  i32.const 11
+  i32.const 0
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
+  local.tee $32
+  i32.load offset=4
+  local.tee $1
+  i32.const 1
+  call $std/array/Ref#constructor
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 2
+  call $std/array/Ref#constructor
+  i32.store offset=8
+  local.get $32
+  call $~lib/array/Array<std/array/Ref | null>#splice
+  local.tee $27
+  i32.load offset=12
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 439
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $27
+  i32.const 0
+  call $~lib/array/Array<std/array/Ref | null>#__get
+  local.tee $26
+  local.get $26
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 440
+   i32.const 10
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.load
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 440
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $32
+  i32.load offset=12
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 442
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $32
+  i32.const 0
+  call $~lib/array/Array<std/array/Ref | null>#__get
+  local.tee $0
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 443
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $32
+  i32.const 1
+  call $~lib/array/Array<std/array/Ref | null>#__get
+  local.tee $25
+  local.get $25
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 444
+   i32.const 10
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.load
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 444
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $30
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $30
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $24
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $23
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $23
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $22
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $21
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $21
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $20
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $20
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $19
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $19
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $18
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $18
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $17
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $17
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $16
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $16
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $15
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $15
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $14
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $14
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $13
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $13
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $12
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $12
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $11
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $11
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $10
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $10
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $9
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $9
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $8
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $8
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $7
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $5
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $34
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $34
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $43
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $43
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $42
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $42
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $41
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $41
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $40
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $40
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $39
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $39
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $38
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $38
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $54
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $54
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $53
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $53
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $51
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $51
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $44
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $44
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $55
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $55
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $52
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $52
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $50
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $50
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $49
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $49
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $48
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $48
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $47
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 431
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $47
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $16
-  i32.const 0
-  call $~lib/array/Array<std/array/Ref>#__get
-  local.tee $57
-  i32.load
-  i32.const 1
-  i32.ne
+  local.get $46
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 432
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $46
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $16
-  i32.const 1
-  call $~lib/array/Array<std/array/Ref>#__get
-  local.tee $58
-  i32.load
-  i32.const 2
-  i32.ne
+  local.get $45
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 433
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $45
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $16
-  i32.const 2
-  call $~lib/array/Array<std/array/Ref>#__get
-  local.tee $59
-  i32.load
-  i32.const 5
-  i32.ne
+  local.get $57
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 434
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 3
-  i32.const 2
-  i32.const 11
-  i32.const 0
-  call $~lib/rt/__allocArray
-  call $~lib/rt/pure/__retain
-  local.tee $20
-  i32.load offset=4
-  local.tee $0
-  i32.const 1
-  call $std/array/Ref#constructor
-  i32.store
-  local.get $0
-  i32.const 0
-  i32.store offset=4
-  local.get $0
-  i32.const 2
-  call $std/array/Ref#constructor
-  i32.store offset=8
-  local.get $20
-  call $~lib/array/Array<std/array/Ref | null>#splice
-  local.tee $30
-  i32.load offset=12
-  i32.const 1
-  i32.ne
+  local.get $59
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 439
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $30
-  i32.const 0
-  call $~lib/array/Array<std/array/Ref | null>#__get
-  local.tee $0
-  local.get $0
-  i32.eqz
+  local.get $58
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 440
-   i32.const 10
-   call $~lib/builtins/abort
-   unreachable
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.load
-  i32.const 1
-  i32.ne
+  local.get $60
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 440
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $20
-  i32.load offset=12
-  i32.const 2
-  i32.ne
+  local.get $61
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 442
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $20
-  i32.const 0
-  call $~lib/array/Array<std/array/Ref | null>#__get
-  local.tee $60
+  local.get $26
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 443
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $20
-  i32.const 1
-  call $~lib/array/Array<std/array/Ref | null>#__get
-  local.tee $2
-  local.get $2
-  i32.eqz
+  local.get $0
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 444
-   i32.const 10
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.load
-  i32.const 2
-  i32.ne
+  local.get $25
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 444
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $9
-  call $~lib/rt/pure/__release
-  local.get $11
-  call $~lib/rt/pure/__release
-  local.get $13
-  call $~lib/rt/pure/__release
-  local.get $17
-  call $~lib/rt/pure/__release
-  local.get $18
-  call $~lib/rt/pure/__release
-  local.get $19
-  call $~lib/rt/pure/__release
-  local.get $12
-  call $~lib/rt/pure/__release
-  local.get $21
-  call $~lib/rt/pure/__release
-  local.get $22
-  call $~lib/rt/pure/__release
-  local.get $23
-  call $~lib/rt/pure/__release
-  local.get $24
-  call $~lib/rt/pure/__release
-  local.get $26
-  call $~lib/rt/pure/__release
-  local.get $27
-  call $~lib/rt/pure/__release
-  local.get $31
-  call $~lib/rt/pure/__release
-  local.get $32
-  call $~lib/rt/pure/__release
-  local.get $33
-  call $~lib/rt/pure/__release
-  local.get $28
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
-  local.get $36
-  call $~lib/rt/pure/__release
-  local.get $37
-  call $~lib/rt/pure/__release
-  local.get $38
-  call $~lib/rt/pure/__release
-  local.get $39
-  call $~lib/rt/pure/__release
-  local.get $40
-  call $~lib/rt/pure/__release
-  local.get $41
-  call $~lib/rt/pure/__release
-  local.get $42
-  call $~lib/rt/pure/__release
-  local.get $43
-  call $~lib/rt/pure/__release
-  local.get $44
-  call $~lib/rt/pure/__release
-  local.get $45
-  call $~lib/rt/pure/__release
-  local.get $46
-  call $~lib/rt/pure/__release
-  local.get $47
-  call $~lib/rt/pure/__release
-  local.get $48
-  call $~lib/rt/pure/__release
-  local.get $49
-  call $~lib/rt/pure/__release
-  local.get $50
-  call $~lib/rt/pure/__release
-  local.get $51
-  call $~lib/rt/pure/__release
-  local.get $52
-  call $~lib/rt/pure/__release
-  local.get $53
-  call $~lib/rt/pure/__release
-  local.get $54
-  call $~lib/rt/pure/__release
-  local.get $55
-  call $~lib/rt/pure/__release
-  local.get $56
-  call $~lib/rt/pure/__release
-  local.get $57
-  call $~lib/rt/pure/__release
-  local.get $58
-  call $~lib/rt/pure/__release
-  local.get $59
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $60
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
   global.get $std/array/arr
   i32.const 0
   i32.const 0
@@ -13637,17 +15782,17 @@
    unreachable
   end
   loop $for-loop|0
-   local.get $7
+   local.get $56
    i32.const 100
    i32.lt_s
    if
     global.get $std/array/arr
     call $~lib/array/Array<i32>#pop
     drop
-    local.get $7
+    local.get $56
     i32.const 1
     i32.add
-    local.set $7
+    local.set $56
     br $for-loop|0
    end
   end
@@ -13666,25 +15811,25 @@
   i32.const 0
   local.set $1
   global.get $std/array/arr
-  local.tee $2
+  local.tee $58
   i32.load offset=12
-  local.tee $3
+  local.tee $60
   i32.const 2
   i32.const 9
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $59
   i32.load offset=4
-  local.set $4
-  loop $for-loop|043
+  local.set $56
+  loop $for-loop|0169
    local.get $1
-   local.get $3
-   local.get $2
+   local.get $60
+   local.get $58
    i32.load offset=12
-   local.tee $5
-   local.get $3
-   local.get $5
+   local.tee $0
+   local.get $60
+   local.get $0
    i32.lt_s
    select
    i32.lt_s
@@ -13692,26 +15837,26 @@
     local.get $1
     i32.const 2
     i32.shl
-    local.tee $5
-    local.get $2
+    local.tee $61
+    local.get $58
     i32.load offset=4
     i32.add
     i32.load
-    local.set $7
-    local.get $4
-    local.get $5
+    local.set $0
+    local.get $56
+    local.get $61
     i32.add
-    local.get $7
+    local.get $0
     f32.convert_i32_s
     f32.store
     local.get $1
     i32.const 1
     i32.add
     local.set $1
-    br $for-loop|043
+    br $for-loop|0169
    end
   end
-  local.get $0
+  local.get $59
   i32.load offset=12
   i32.const 4
   i32.ne
@@ -13723,7 +15868,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $59
   i32.const 0
   call $~lib/array/Array<f32>#__get
   global.get $std/array/arr
@@ -13744,7 +15889,15 @@
   global.get $std/array/arr
   i32.const 23
   call $~lib/array/Array<i32>#map<i32>
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/i
   i32.const 6
   i32.ne
@@ -13773,7 +15926,15 @@
   global.get $std/array/arr
   i32.const 24
   call $~lib/array/Array<i32>#map<i32>
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/i
   i32.const 406
   i32.ne
@@ -13802,7 +15963,15 @@
   global.get $std/array/arr
   i32.const 25
   call $~lib/array/Array<i32>#map<i32>
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/i
   i32.const 1
   i32.ne
@@ -13832,8 +16001,15 @@
   global.get $std/array/arr
   i32.const 3
   call $~lib/array/Array<i32>#push
-  local.get $0
-  call $~lib/rt/pure/__release
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/arr
   i32.const 26
   call $~lib/array/Array<i32>#filter
@@ -13854,7 +16030,15 @@
   global.get $std/array/arr
   i32.const 27
   call $~lib/array/Array<i32>#filter
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/i
   i32.const 6
   i32.ne
@@ -13883,7 +16067,15 @@
   global.get $std/array/arr
   i32.const 28
   call $~lib/array/Array<i32>#filter
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/i
   i32.const 406
   i32.ne
@@ -13912,7 +16104,15 @@
   global.get $std/array/arr
   i32.const 29
   call $~lib/array/Array<i32>#filter
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/i
   i32.const 1
   i32.ne
@@ -13943,7 +16143,14 @@
   i32.const 3
   call $~lib/array/Array<i32>#push
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.get $std/array/arr
   i32.const 30
   i32.const 0
@@ -14258,63 +16465,63 @@
    i32.const 5280
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $3
+   local.tee $54
    i32.load offset=12
-   local.tee $5
+   local.tee $61
    i32.const 1
    i32.le_s
    if
-    local.get $3
+    local.get $54
     call $~lib/rt/pure/__retain
     br $__inlined_func$~lib/array/Array<f32>#sort
    end
-   local.get $3
+   local.get $54
    i32.load offset=4
-   local.set $4
-   local.get $5
+   local.set $56
+   local.get $61
    i32.const 2
    i32.eq
    if
-    local.get $4
+    local.get $56
     f32.load offset=4
-    local.tee $14
-    local.get $4
+    local.tee $29
+    local.get $56
     f32.load
-    local.tee $34
+    local.tee $37
     call $~lib/util/sort/COMPARATOR<f32>~anonymous|0
     i32.const 0
     i32.lt_s
     if
-     local.get $4
-     local.get $34
+     local.get $56
+     local.get $37
      f32.store offset=4
-     local.get $4
-     local.get $14
+     local.get $56
+     local.get $29
      f32.store
     end
-    local.get $3
+    local.get $54
     call $~lib/rt/pure/__retain
     br $__inlined_func$~lib/array/Array<f32>#sort
    end
-   local.get $5
+   local.get $61
    i32.const 256
    i32.lt_s
    if
     i32.const 0
-    local.set $2
+    local.set $60
     loop $for-loop|00
-     local.get $2
-     local.get $5
+     local.get $60
+     local.get $61
      i32.lt_s
      if
-      local.get $4
-      local.get $2
+      local.get $56
+      local.get $60
       i32.const 2
       i32.shl
       i32.add
       f32.load
-      local.set $14
-      local.get $2
+      local.set $29
+      local.get $60
       i32.const 1
       i32.sub
       local.set $0
@@ -14323,14 +16530,14 @@
        i32.const 0
        i32.ge_s
        if
-        local.get $14
-        local.get $4
+        local.get $29
+        local.get $56
         local.get $0
         i32.const 2
         i32.shl
         i32.add
         f32.load
-        local.tee $34
+        local.tee $37
         call $~lib/util/sort/COMPARATOR<f32>~anonymous|0
         i32.const 0
         i32.lt_s
@@ -14340,44 +16547,52 @@
          i32.const 1
          i32.sub
          local.set $0
-         local.get $4
+         local.get $56
          local.get $1
          i32.const 1
          i32.add
          i32.const 2
          i32.shl
          i32.add
-         local.get $34
+         local.get $37
          f32.store
          br $while-continue|1
         end
        end
       end
-      local.get $4
+      local.get $56
       local.get $0
       i32.const 1
       i32.add
       i32.const 2
       i32.shl
       i32.add
-      local.get $14
+      local.get $29
       f32.store
-      local.get $2
+      local.get $60
       i32.const 1
       i32.add
-      local.set $2
+      local.set $60
       br $for-loop|00
      end
     end
    else
-    local.get $4
-    local.get $5
+    local.get $56
+    local.get $61
     call $~lib/util/sort/weakHeapSort<f32>
    end
-   local.get $3
+   local.get $54
    call $~lib/rt/pure/__retain
   end
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   block $__inlined_func$std/array/isArraysEqual<f32> (result i32)
    i32.const 8
    i32.const 2
@@ -14385,50 +16600,50 @@
    i32.const 5328
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.set $7
+   local.set $44
    i32.const 0
    local.set $1
    block $folding-inner0
-    local.get $3
+    local.get $54
     i32.load offset=12
-    local.tee $2
-    local.get $7
+    local.tee $0
+    local.get $44
     i32.load offset=12
     i32.ne
     br_if $folding-inner0
     i32.const 1
-    local.get $3
-    local.get $7
+    local.get $44
+    local.get $54
     i32.eq
     br_if $__inlined_func$std/array/isArraysEqual<f32>
     drop
-    loop $for-loop|001
+    loop $for-loop|0179
      local.get $1
-     local.get $2
+     local.get $0
      i32.lt_s
      if
-      local.get $3
+      local.get $54
       local.get $1
       call $~lib/array/Array<f32>#__get
-      local.tee $14
-      local.get $14
+      local.tee $37
+      local.get $37
       f32.ne
       if (result i32)
-       local.get $7
+       local.get $44
        local.get $1
        call $~lib/array/Array<f32>#__get
-       local.tee $14
-       local.get $14
+       local.tee $37
+       local.get $37
        f32.ne
       else
        i32.const 0
       end
       i32.eqz
       if
-       local.get $3
+       local.get $54
        local.get $1
        call $~lib/array/Array<f32>#__get
-       local.get $7
+       local.get $44
        local.get $1
        call $~lib/array/Array<f32>#__get
        f32.ne
@@ -14438,7 +16653,7 @@
       i32.const 1
       i32.add
       local.set $1
-      br $for-loop|001
+      br $for-loop|0179
      end
     end
     i32.const 1
@@ -14462,79 +16677,79 @@
    i32.const 5376
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $4
+   local.tee $53
    i32.load offset=12
-   local.tee $6
+   local.tee $61
    i32.const 1
    i32.le_s
    if
-    local.get $4
+    local.get $53
     call $~lib/rt/pure/__retain
     br $__inlined_func$~lib/array/Array<f64>#sort
    end
-   local.get $4
+   local.get $53
    i32.load offset=4
-   local.set $5
-   local.get $6
+   local.set $56
+   local.get $61
    i32.const 2
    i32.eq
    if
-    local.get $5
+    local.get $56
     f64.load offset=8
-    local.tee $15
-    local.get $5
+    local.tee $28
+    local.get $56
     f64.load
-    local.tee $35
+    local.tee $36
     call $~lib/util/sort/COMPARATOR<f64>~anonymous|0
     i32.const 0
     i32.lt_s
     if
-     local.get $5
-     local.get $35
+     local.get $56
+     local.get $36
      f64.store offset=8
-     local.get $5
-     local.get $15
+     local.get $56
+     local.get $28
      f64.store
     end
-    local.get $4
+    local.get $53
     call $~lib/rt/pure/__retain
     br $__inlined_func$~lib/array/Array<f64>#sort
    end
-   local.get $6
+   local.get $61
    i32.const 256
    i32.lt_s
    if
     i32.const 0
-    local.set $2
-    loop $for-loop|02
-     local.get $2
-     local.get $6
+    local.set $60
+    loop $for-loop|01
+     local.get $60
+     local.get $61
      i32.lt_s
      if
-      local.get $5
-      local.get $2
+      local.get $56
+      local.get $60
       i32.const 3
       i32.shl
       i32.add
       f64.load
-      local.set $15
-      local.get $2
+      local.set $28
+      local.get $60
       i32.const 1
       i32.sub
       local.set $0
-      loop $while-continue|13
+      loop $while-continue|12
        local.get $0
        i32.const 0
        i32.ge_s
        if
-        local.get $15
-        local.get $5
+        local.get $28
+        local.get $56
         local.get $0
         i32.const 3
         i32.shl
         i32.add
         f64.load
-        local.tee $35
+        local.tee $36
         call $~lib/util/sort/COMPARATOR<f64>~anonymous|0
         i32.const 0
         i32.lt_s
@@ -14544,44 +16759,52 @@
          i32.const 1
          i32.sub
          local.set $0
-         local.get $5
+         local.get $56
          local.get $1
          i32.const 1
          i32.add
          i32.const 3
          i32.shl
          i32.add
-         local.get $35
+         local.get $36
          f64.store
-         br $while-continue|13
+         br $while-continue|12
         end
        end
       end
-      local.get $5
+      local.get $56
       local.get $0
       i32.const 1
       i32.add
       i32.const 3
       i32.shl
       i32.add
-      local.get $15
+      local.get $28
       f64.store
-      local.get $2
+      local.get $60
       i32.const 1
       i32.add
-      local.set $2
-      br $for-loop|02
+      local.set $60
+      br $for-loop|01
      end
     end
    else
-    local.get $5
-    local.get $6
+    local.get $56
+    local.get $61
     call $~lib/util/sort/weakHeapSort<f64>
    end
-   local.get $4
+   local.get $53
    call $~lib/rt/pure/__retain
   end
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   block $__inlined_func$std/array/isArraysEqual<f64> (result i32)
    i32.const 8
    i32.const 3
@@ -14589,60 +16812,60 @@
    i32.const 5456
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.set $2
+   local.set $55
    i32.const 0
-   local.set $1
-   block $folding-inner01
-    local.get $4
+   local.set $59
+   block $folding-inner0181
+    local.get $53
     i32.load offset=12
-    local.tee $5
-    local.get $2
+    local.tee $1
+    local.get $55
     i32.load offset=12
     i32.ne
-    br_if $folding-inner01
+    br_if $folding-inner0181
     i32.const 1
-    local.get $2
-    local.get $4
+    local.get $53
+    local.get $55
     i32.eq
     br_if $__inlined_func$std/array/isArraysEqual<f64>
     drop
-    loop $for-loop|025
+    loop $for-loop|0182
+     local.get $59
      local.get $1
-     local.get $5
      i32.lt_s
      if
-      local.get $4
-      local.get $1
+      local.get $53
+      local.get $59
       call $~lib/array/Array<f64>#__get
-      local.tee $15
-      local.get $15
+      local.tee $36
+      local.get $36
       f64.ne
       if (result i32)
-       local.get $2
-       local.get $1
+       local.get $55
+       local.get $59
        call $~lib/array/Array<f64>#__get
-       local.tee $15
-       local.get $15
+       local.tee $36
+       local.get $36
        f64.ne
       else
        i32.const 0
       end
       i32.eqz
       if
-       local.get $4
-       local.get $1
+       local.get $53
+       local.get $59
        call $~lib/array/Array<f64>#__get
-       local.get $2
-       local.get $1
+       local.get $55
+       local.get $59
        call $~lib/array/Array<f64>#__get
        f64.ne
-       br_if $folding-inner01
+       br_if $folding-inner0181
       end
-      local.get $1
+      local.get $59
       i32.const 1
       i32.add
-      local.set $1
-      br $for-loop|025
+      local.set $59
+      br $for-loop|0182
      end
     end
     i32.const 1
@@ -14665,18 +16888,26 @@
   i32.const 5536
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $17
+  local.tee $57
   i32.const 46
   call $~lib/array/Array<i32>#sort
-  call $~lib/rt/pure/__release
-  local.get $17
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $57
   i32.const 5
   i32.const 2
   i32.const 3
   i32.const 5584
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $21
+  local.tee $56
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14694,18 +16925,26 @@
   i32.const 5632
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $18
+  local.tee $59
   i32.const 47
   call $~lib/array/Array<i32>#sort
-  call $~lib/rt/pure/__release
-  local.get $18
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
   i32.const 5
   i32.const 2
   i32.const 7
   i32.const 5680
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $22
+  local.tee $61
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14723,64 +16962,64 @@
   i32.const 5728
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $19
+  local.set $58
   i32.const 1
   i32.const 2
   i32.const 3
   i32.const 5744
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $1
+  local.set $52
   i32.const 2
   i32.const 2
   i32.const 3
   i32.const 5776
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $50
   i32.const 4
   i32.const 2
   i32.const 3
   i32.const 5808
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $6
+  local.set $49
   i32.const 4
   i32.const 2
   i32.const 3
   i32.const 5840
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $0
+  local.set $51
   i32.const 64
   call $std/array/createReverseOrderedArray
-  local.set $8
+  local.set $48
   i32.const 128
   call $std/array/createReverseOrderedArray
-  local.set $9
+  local.set $47
   i32.const 1024
   call $std/array/createReverseOrderedArray
-  local.set $11
+  local.set $46
   i32.const 10000
   call $std/array/createReverseOrderedArray
-  local.set $13
+  local.set $45
   i32.const 512
   call $std/array/createRandomOrderedArray
-  local.set $12
-  local.get $19
-  i32.const 48
+  local.set $60
+  local.get $58
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $1
-  i32.const 48
+  local.get $52
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $1
+  local.get $52
   i32.const 1
   i32.const 2
   i32.const 3
   i32.const 5872
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $23
+  local.tee $0
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14792,17 +17031,17 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
-  i32.const 48
+  local.get $50
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $5
+  local.get $50
   i32.const 2
   i32.const 2
   i32.const 3
   i32.const 5904
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $24
+  local.tee $1
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14814,11 +17053,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
-  i32.const 48
+  local.get $49
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $6
-  local.get $0
+  local.get $49
+  local.get $51
   i32.const 0
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14830,11 +17069,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $8
-  i32.const 48
+  local.get $48
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $8
-  local.get $0
+  local.get $48
+  local.get $51
   i32.const 4
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14846,11 +17085,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
-  i32.const 48
+  local.get $47
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $9
-  local.get $0
+  local.get $47
+  local.get $51
   i32.const 4
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14862,11 +17101,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $11
-  i32.const 48
+  local.get $46
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $11
-  local.get $0
+  local.get $46
+  local.get $51
   i32.const 4
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14878,11 +17117,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $13
-  i32.const 48
+  local.get $45
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $13
-  local.get $0
+  local.get $45
+  local.get $51
   i32.const 4
   call $std/array/isArraysEqual<u32>
   i32.eqz
@@ -14894,49 +17133,189 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $12
-  i32.const 48
+  local.get $60
+  i32.const 46
   call $std/array/assertSorted<i32>
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $17
-  call $~lib/rt/pure/__release
-  local.get $21
-  call $~lib/rt/pure/__release
-  local.get $18
-  call $~lib/rt/pure/__release
-  local.get $22
-  call $~lib/rt/pure/__release
-  local.get $19
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $54
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $54
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $44
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $44
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $53
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $53
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $55
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $55
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $57
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $56
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $56
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $52
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $52
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $50
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $50
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $49
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $49
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $51
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $51
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $48
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $48
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $47
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $47
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $46
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $46
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $45
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $45
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $9
-  call $~lib/rt/pure/__release
-  local.get $11
-  call $~lib/rt/pure/__release
-  local.get $13
-  call $~lib/rt/pure/__release
-  local.get $12
-  call $~lib/rt/pure/__release
-  local.get $23
-  call $~lib/rt/pure/__release
-  local.get $24
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 64
   call $std/array/createRandomOrderedArray
   local.set $0
@@ -14944,97 +17323,80 @@
   call $std/array/createRandomOrderedArray
   local.set $1
   local.get $0
-  i32.const 49
+  i32.const 48
   call $std/array/assertSorted<i32>
   local.get $0
-  i32.const 50
+  i32.const 49
   call $std/array/assertSorted<i32>
   local.get $1
-  i32.const 51
+  i32.const 50
   call $std/array/assertSorted<i32>
   local.get $1
-  i32.const 52
+  i32.const 51
   call $std/array/assertSorted<i32>
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   call $std/array/createReverseOrderedNestedArray
-  local.tee $0
-  i32.const 53
+  local.tee $1
+  i32.const 52
   call $std/array/assertSorted<~lib/array/Array<i32>>
-  local.get $0
-  call $~lib/rt/pure/__release
+  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   call $std/array/createReverseOrderedElementsArray
-  local.tee $0
-  i32.const 54
+  local.tee $1
+  i32.const 53
   call $std/array/assertSorted<~lib/array/Array<i32>>
-  local.get $0
-  call $~lib/rt/pure/__release
+  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 7
   i32.const 2
   i32.const 15
   i32.const 6080
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $60
   i32.const 7
   i32.const 2
   i32.const 15
   i32.const 6128
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $7
-  block $__inlined_func$std/array/isSorted<~lib/string/String | null> (result i32)
-   i32.const 1
-   local.set $1
-   local.get $5
-   i32.const 55
-   call $~lib/array/Array<~lib/array/Array<i32>>#sort
-   local.tee $0
-   local.set $2
-   local.get $0
-   i32.load offset=12
-   local.set $6
-   loop $for-loop|03
-    local.get $1
-    local.get $6
-    i32.lt_s
-    if
-     local.get $2
-     local.get $1
-     i32.const 1
-     i32.sub
-     call $~lib/array/Array<std/array/Ref | null>#__get
-     local.tee $3
-     local.get $2
-     local.get $1
-     call $~lib/array/Array<std/array/Ref | null>#__get
-     local.tee $4
-     call $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0
-     i32.const 0
-     i32.gt_s
-     if
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $4
-      call $~lib/rt/pure/__release
-      i32.const 0
-      br $__inlined_func$std/array/isSorted<~lib/string/String | null>
-     end
-     local.get $3
-     call $~lib/rt/pure/__release
-     local.get $4
-     call $~lib/rt/pure/__release
-     local.get $1
-     i32.const 1
-     i32.add
-     local.set $1
-     br $for-loop|03
-    end
-   end
-   i32.const 1
-  end
+  local.set $56
+  local.get $60
+  i32.const 54
+  call $~lib/array/Array<~lib/array/Array<i32>>#sort
+  local.tee $1
+  call $std/array/isSorted<~lib/string/String | null>
   i32.eqz
   if
    i32.const 0
@@ -15044,62 +17406,18 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/pure/__release
-  block $__inlined_func$std/array/isArraysEqual<~lib/string/String | null> (result i32)
-   i32.const 0
-   local.set $1
-   i32.const 0
-   local.get $5
-   i32.load offset=12
-   local.tee $3
-   local.get $7
-   i32.load offset=12
-   i32.ne
-   br_if $__inlined_func$std/array/isArraysEqual<~lib/string/String | null>
-   drop
-   i32.const 1
-   local.get $5
-   local.get $7
-   i32.eq
-   br_if $__inlined_func$std/array/isArraysEqual<~lib/string/String | null>
-   drop
-   loop $for-loop|04
-    local.get $1
-    local.get $3
-    i32.lt_s
-    if
-     local.get $5
-     local.get $1
-     call $~lib/array/Array<std/array/Ref | null>#__get
-     local.tee $0
-     local.get $7
-     local.get $1
-     call $~lib/array/Array<std/array/Ref | null>#__get
-     local.tee $2
-     call $~lib/string/String.__eq
-     i32.eqz
-     if
-      local.get $0
-      call $~lib/rt/pure/__release
-      local.get $2
-      call $~lib/rt/pure/__release
-      i32.const 0
-      br $__inlined_func$std/array/isArraysEqual<~lib/string/String | null>
-     end
-     local.get $0
-     call $~lib/rt/pure/__release
-     local.get $2
-     call $~lib/rt/pure/__release
-     local.get $1
-     i32.const 1
-     i32.add
-     local.set $1
-     br $for-loop|04
-    end
-   end
-   i32.const 1
+  local.get $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
+  local.get $60
+  local.get $56
+  call $std/array/isArraysEqual<~lib/string/String | null>
   i32.eqz
   if
    i32.const 0
@@ -15110,167 +17428,140 @@
    unreachable
   end
   i32.const 0
-  local.set $1
+  local.set $59
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 1600
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $0
   i32.const 0
   i32.const 1600
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 16
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $2
+  local.tee $58
   i32.const 0
   i32.store
-  local.get $2
+  local.get $58
   i32.const 0
   i32.store offset=4
-  local.get $2
+  local.get $58
   i32.const 0
   i32.store offset=8
-  local.get $2
+  local.get $58
   i32.const 0
   i32.store offset=12
   local.get $0
-  local.set $3
-  local.get $0
-  local.get $2
+  local.tee $1
+  local.get $58
   i32.load
-  local.tee $4
+  local.tee $61
   i32.ne
   if
-   local.get $3
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $61
+   i32.const 9744
+   i32.gt_u
+   if
+    local.get $61
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $58
+  local.get $1
   i32.store
-  local.get $2
+  local.get $58
   local.get $0
   i32.store offset=4
-  local.get $2
+  local.get $58
   i32.const 1600
   i32.store offset=8
-  local.get $2
+  local.get $58
   i32.const 400
   i32.store offset=12
-  loop $for-loop|09
-   local.get $1
+  loop $for-loop|045
+   local.get $59
    i32.const 400
    i32.lt_s
    if
-    local.get $1
-    local.set $3
+    local.get $58
+    local.get $59
     call $~lib/math/NativeMath.random
     f64.const 32
     f64.mul
     i32.trunc_f64_s
-    local.set $8
-    i32.const 0
-    local.set $6
-    i32.const 6064
-    local.set $0
-    loop $for-loop|01
-     local.get $6
-     local.get $8
-     i32.lt_s
-     if
-      block $__inlined_func$~lib/string/String#charAt (result i32)
-       i32.const 6064
-       call $~lib/math/NativeMath.random
-       i32.const 5088
-       call $~lib/string/String#get:length
-       f64.convert_i32_s
-       f64.mul
-       f64.floor
-       i32.trunc_f64_s
-       local.tee $1
-       i32.const 5088
-       call $~lib/string/String#get:length
-       i32.ge_u
-       br_if $__inlined_func$~lib/string/String#charAt
-       drop
-       i32.const 2
-       i32.const 1
-       call $~lib/rt/tlsf/__alloc
-       local.tee $4
-       local.get $1
-       i32.const 1
-       i32.shl
-       i32.const 5088
-       i32.add
-       i32.load16_u
-       i32.store16
-       local.get $4
-       call $~lib/rt/pure/__retain
-      end
-      local.set $1
-      local.get $0
-      local.tee $4
-      local.get $0
-      local.get $1
-      call $~lib/string/String.__concat
-      local.tee $9
-      local.tee $0
-      i32.ne
-      if
-       local.get $0
-       call $~lib/rt/pure/__retain
-       local.set $0
-       local.get $4
-       call $~lib/rt/pure/__release
-      end
-      local.get $1
-      call $~lib/rt/pure/__release
-      local.get $9
-      call $~lib/rt/pure/__release
-      local.get $6
-      i32.const 1
-      i32.add
-      local.set $6
-      br $for-loop|01
-     end
-    end
-    local.get $2
-    local.get $3
-    local.get $0
+    call $std/array/createRandomString
+    local.tee $1
     call $~lib/array/Array<~lib/array/Array<i32>>#__set
-    local.get $0
-    call $~lib/rt/pure/__release
-    local.get $3
+    local.get $1
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $59
     i32.const 1
     i32.add
-    local.set $1
-    br $for-loop|09
+    local.set $59
+    br $for-loop|045
    end
   end
-  local.get $2
-  i32.const 56
+  local.get $58
+  i32.const 55
   call $std/array/assertSorted<~lib/array/Array<i32>>
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $56
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $56
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 2
   i32.const 0
   i32.const 17
   i32.const 6208
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $50
   i32.load offset=4
-  local.get $0
+  local.get $50
   i32.load offset=12
   call $~lib/util/string/joinBooleanArray
-  local.tee $4
+  local.tee $57
   i32.const 6336
   call $~lib/string/String.__eq
   i32.eqz
@@ -15288,10 +17579,13 @@
   i32.const 6384
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $5
+  local.tee $49
+  i32.load offset=4
+  local.get $49
+  i32.load offset=12
   i32.const 6064
-  call $~lib/array/Array<i32>#join
-  local.tee $7
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $59
   i32.const 6448
   call $~lib/string/String.__eq
   i32.eqz
@@ -15309,10 +17603,13 @@
   i32.const 6480
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $6
+  local.tee $48
+  i32.load offset=4
+  local.get $48
+  i32.load offset=12
   i32.const 6512
-  call $~lib/array/Array<u32>#join
-  local.tee $8
+  call $~lib/util/string/joinIntegerArray<u32>
+  local.tee $58
   i32.const 6448
   call $~lib/string/String.__eq
   i32.eqz
@@ -15330,10 +17627,13 @@
   i32.const 6544
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $9
+  local.tee $47
+  i32.load offset=4
+  local.get $47
+  i32.load offset=12
   i32.const 6576
-  call $~lib/array/Array<i32>#join
-  local.tee $11
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $60
   i32.const 6608
   call $~lib/string/String.__eq
   i32.eqz
@@ -15351,12 +17651,12 @@
   i32.const 6672
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $1
+  local.tee $46
   i32.load offset=4
-  local.get $1
+  local.get $46
   i32.load offset=12
   call $~lib/util/string/joinFloatArray<f64>
-  local.tee $13
+  local.tee $56
   i32.const 7824
   call $~lib/string/String.__eq
   i32.eqz
@@ -15374,10 +17674,13 @@
   i32.const 7952
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $17
+  local.tee $45
+  i32.load offset=4
+  local.get $45
+  i32.load offset=12
   i32.const 6064
-  call $~lib/array/Array<~lib/string/String | null>#join
-  local.tee $18
+  call $~lib/util/string/joinReferenceArray<~lib/string/String | null>
+  local.tee $61
   i32.const 7920
   call $~lib/string/String.__eq
   i32.eqz
@@ -15395,22 +17698,25 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $2
+  local.tee $55
   i32.load offset=4
-  local.tee $3
+  local.tee $1
   i32.const 0
   call $std/array/Ref#constructor
   i32.store
-  local.get $3
+  local.get $1
   i32.const 0
   i32.store offset=4
-  local.get $3
+  local.get $1
   i32.const 0
   call $std/array/Ref#constructor
   i32.store offset=8
-  local.get $2
-  call $~lib/array/Array<std/array/Ref | null>#join
-  local.tee $19
+  local.get $55
+  i32.load offset=4
+  local.get $55
+  i32.load offset=12
+  call $~lib/util/string/joinReferenceArray<std/array/Ref | null>
+  local.tee $0
   i32.const 8032
   call $~lib/string/String.__eq
   i32.eqz
@@ -15428,19 +17734,22 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $3
+  local.tee $52
   i32.load offset=4
-  local.tee $12
+  local.tee $1
   i32.const 0
   call $std/array/Ref#constructor
   i32.store
-  local.get $12
+  local.get $1
   i32.const 0
   call $std/array/Ref#constructor
   i32.store offset=4
-  local.get $3
-  call $~lib/array/Array<std/array/Ref | null>#join
-  local.tee $12
+  local.get $52
+  i32.load offset=4
+  local.get $52
+  i32.load offset=12
+  call $~lib/util/string/joinReferenceArray<std/array/Ref | null>
+  local.tee $1
   i32.const 8112
   call $~lib/string/String.__eq
   i32.eqz
@@ -15452,71 +17761,185 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $50
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $50
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $57
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $49
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $49
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $48
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $48
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $47
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $47
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $46
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $46
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $56
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $56
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $45
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $45
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $55
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $55
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $9
-  call $~lib/rt/pure/__release
-  local.get $11
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $52
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $52
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $13
-  call $~lib/rt/pure/__release
-  local.get $17
-  call $~lib/rt/pure/__release
-  local.get $18
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $19
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $12
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   i32.const 2
   i32.const 3
   i32.const 8192
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $3
+  local.set $34
   i32.const 1
   i32.const 2
   i32.const 3
   i32.const 8208
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $4
+  local.set $43
   i32.const 2
   i32.const 2
   i32.const 3
   i32.const 8240
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $42
   i32.const 4
   i32.const 2
   i32.const 3
   i32.const 8272
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $7
-  local.get $3
+  local.set $41
+  local.get $34
+  i32.load offset=4
+  local.get $34
+  i32.load offset=12
   i32.const 6304
-  call $~lib/array/Array<i32>#join
-  local.tee $0
-  local.get $0
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $50
   i32.const 6064
   call $~lib/string/String.__eq
   i32.eqz
@@ -15528,12 +17951,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $43
+  i32.load offset=4
+  local.get $43
+  i32.load offset=12
   i32.const 6304
-  call $~lib/array/Array<i32>#join
-  local.tee $0
-  local.set $17
-  local.get $0
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $49
   i32.const 7920
   call $~lib/string/String.__eq
   i32.eqz
@@ -15545,12 +17969,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $42
+  i32.load offset=4
+  local.get $42
+  i32.load offset=12
   i32.const 6304
-  call $~lib/array/Array<i32>#join
-  local.tee $0
-  local.set $18
-  local.get $0
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $48
   i32.const 8304
   call $~lib/string/String.__eq
   i32.eqz
@@ -15562,12 +17987,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $7
+  local.get $41
+  i32.load offset=4
+  local.get $41
+  i32.load offset=12
   i32.const 6304
-  call $~lib/array/Array<i32>#join
-  local.tee $0
-  local.set $19
-  local.get $0
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $47
   i32.const 8336
   call $~lib/string/String.__eq
   i32.eqz
@@ -15585,14 +18011,12 @@
   i32.const 8368
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $6
+  local.tee $54
   i32.load offset=4
-  local.get $6
+  local.get $54
   i32.load offset=12
   call $~lib/util/string/joinIntegerArray<i8>
-  local.tee $0
-  local.set $12
-  local.get $0
+  local.tee $46
   i32.const 8400
   call $~lib/string/String.__eq
   i32.eqz
@@ -15610,14 +18034,12 @@
   i32.const 8432
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $8
+  local.tee $53
   i32.load offset=4
-  local.get $8
+  local.get $53
   i32.load offset=12
   call $~lib/util/string/joinIntegerArray<u16>
-  local.tee $0
-  local.set $21
-  local.get $0
+  local.tee $45
   i32.const 8464
   call $~lib/string/String.__eq
   i32.eqz
@@ -15635,14 +18057,12 @@
   i32.const 8512
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $9
+  local.tee $51
   i32.load offset=4
-  local.get $9
+  local.get $51
   i32.load offset=12
   call $~lib/util/string/joinIntegerArray<u64>
-  local.tee $0
-  local.set $22
-  local.get $0
+  local.tee $57
   i32.const 8560
   call $~lib/string/String.__eq
   i32.eqz
@@ -15660,14 +18080,12 @@
   i32.const 8624
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $11
+  local.tee $44
   i32.load offset=4
-  local.get $11
+  local.get $44
   i32.load offset=12
   call $~lib/util/string/joinIntegerArray<i64>
-  local.tee $0
-  local.set $23
-  local.get $0
+  local.tee $59
   i32.const 8672
   call $~lib/string/String.__eq
   i32.eqz
@@ -15685,12 +18103,13 @@
   i32.const 8784
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $24
+  local.tee $55
+  i32.load offset=4
+  local.get $55
+  i32.load offset=12
   i32.const 6304
-  call $~lib/array/Array<~lib/string/String | null>#join
-  local.tee $0
-  local.set $26
-  local.get $0
+  call $~lib/util/string/joinReferenceArray<~lib/string/String | null>
+  local.tee $58
   i32.const 8832
   call $~lib/string/String.__eq
   i32.eqz
@@ -15708,12 +18127,13 @@
   i32.const 8944
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $27
+  local.tee $52
+  i32.load offset=4
+  local.get $52
+  i32.load offset=12
   i32.const 6304
-  call $~lib/array/Array<~lib/string/String | null>#join
-  local.tee $0
-  local.set $31
-  local.get $0
+  call $~lib/util/string/joinReferenceArray<~lib/string/String | null>
+  local.tee $60
   i32.const 8976
   call $~lib/string/String.__eq
   i32.eqz
@@ -15731,7 +18151,7 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $40
   i32.load offset=4
   local.tee $1
   i32.const 2
@@ -15749,14 +18169,12 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=4
-  local.get $0
+  local.get $40
   i32.load offset=4
-  local.get $0
+  local.get $40
   i32.load offset=12
   call $~lib/util/string/joinReferenceArray<~lib/array/Array<i32>>
-  local.tee $1
-  local.set $32
-  local.get $1
+  local.tee $56
   i32.const 9072
   call $~lib/string/String.__eq
   i32.eqz
@@ -15774,9 +18192,9 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $1
+  local.tee $39
   i32.load offset=4
-  local.tee $2
+  local.tee $1
   i32.const 2
   i32.const 0
   i32.const 6
@@ -15784,7 +18202,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
+  local.get $1
   i32.const 2
   i32.const 0
   i32.const 6
@@ -15792,14 +18210,12 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=4
-  local.get $1
+  local.get $39
   i32.load offset=4
-  local.get $1
+  local.get $39
   i32.load offset=12
   call $~lib/util/string/joinReferenceArray<~lib/array/Array<u8>>
-  local.tee $2
-  local.set $33
-  local.get $2
+  local.tee $61
   i32.const 9072
   call $~lib/string/String.__eq
   i32.eqz
@@ -15811,106 +18227,274 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1
-  i32.const 2
-  i32.const 24
-  i32.const 0
-  call $~lib/rt/__allocArray
-  call $~lib/rt/pure/__retain
-  local.tee $2
-  i32.load offset=4
-  i32.const 1
-  i32.const 2
-  i32.const 23
-  i32.const 0
-  call $~lib/rt/__allocArray
-  call $~lib/rt/pure/__retain
-  local.tee $29
-  i32.load offset=4
-  i32.const 1
-  i32.const 2
-  i32.const 7
-  i32.const 9168
-  call $~lib/rt/__allocArray
-  call $~lib/rt/pure/__retain
-  i32.store
-  local.get $29
-  i32.store
-  local.get $2
-  i32.load offset=4
-  local.get $2
-  i32.load offset=12
-  call $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array<u32>>>
-  local.tee $28
-  local.set $29
-  local.get $28
-  i32.const 7920
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 1
+  i32.const 2
+  i32.const 24
+  i32.const 0
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
+  local.tee $38
+  i32.load offset=4
+  i32.const 1
+  i32.const 2
+  i32.const 23
+  i32.const 0
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
+  local.tee $1
+  i32.load offset=4
+  i32.const 1
+  i32.const 2
+  i32.const 7
+  i32.const 9168
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $1
+  i32.store
+  local.get $38
+  i32.load offset=4
+  local.get $38
+  i32.load offset=12
+  call $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array<u32>>>
+  local.tee $1
+  i32.const 7920
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1296
+   i32.const 1036
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $34
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $34
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $43
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $43
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $42
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $42
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $41
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $41
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $50
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $50
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $49
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $49
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $48
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $48
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $47
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $47
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $54
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $54
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $46
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $46
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $53
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $53
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $45
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $45
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $51
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $51
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $57
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $44
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $44
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $55
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $55
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $52
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $52
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $56
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $56
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 9744
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1296
-   i32.const 1036
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  call $~lib/rt/pure/__release
-  local.get $17
-  call $~lib/rt/pure/__release
-  local.get $18
-  call $~lib/rt/pure/__release
-  local.get $19
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $12
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $21
-  call $~lib/rt/pure/__release
-  local.get $9
-  call $~lib/rt/pure/__release
-  local.get $22
-  call $~lib/rt/pure/__release
-  local.get $11
-  call $~lib/rt/pure/__release
-  local.get $23
-  call $~lib/rt/pure/__release
-  local.get $24
-  call $~lib/rt/pure/__release
-  local.get $26
-  call $~lib/rt/pure/__release
-  local.get $27
-  call $~lib/rt/pure/__release
-  local.get $31
-  call $~lib/rt/pure/__release
-  local.get $32
-  call $~lib/rt/pure/__release
-  local.get $33
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
   global.get $std/array/arr
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 4
   i32.const 2
   i32.const 12
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $5
+  local.tee $60
   i32.load offset=4
-  local.tee $3
+  local.tee $1
   i32.const 1
   i32.const 2
   i32.const 3
@@ -15918,7 +18502,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $3
+  local.get $1
   i32.const 3
   i32.const 2
   i32.const 3
@@ -15926,7 +18510,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=4
-  local.get $3
+  local.get $1
   i32.const 3
   i32.const 2
   i32.const 3
@@ -15934,7 +18518,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=8
-  local.get $3
+  local.get $1
   i32.const 3
   i32.const 2
   i32.const 3
@@ -15942,9 +18526,9 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=12
-  local.get $5
+  local.get $60
   call $~lib/array/Array<~lib/array/Array<i32>>#flat
-  local.tee $7
+  local.tee $56
   i32.load offset=12
   i32.const 10
   i32.ne
@@ -15957,14 +18541,14 @@
    unreachable
   end
   loop $for-loop|1
-   local.get $10
+   local.get $35
    i32.const 10
    i32.lt_s
    if
-    local.get $7
-    local.get $10
+    local.get $56
+    local.get $35
     call $~lib/array/Array<u32>#__get
-    local.get $10
+    local.get $35
     i32.ne
     if
      i32.const 0
@@ -15974,10 +18558,10 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $10
+    local.get $35
     i32.const 1
     i32.add
-    local.set $10
+    local.set $35
     br $for-loop|1
    end
   end
@@ -15987,9 +18571,9 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $6
+  local.tee $61
   i32.load offset=4
-  local.tee $3
+  local.tee $1
   i32.const 1
   i32.const 2
   i32.const 15
@@ -15997,7 +18581,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $3
+  local.get $1
   i32.const 3
   i32.const 2
   i32.const 15
@@ -16005,7 +18589,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=4
-  local.get $3
+  local.get $1
   i32.const 3
   i32.const 2
   i32.const 15
@@ -16013,7 +18597,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=8
-  local.get $3
+  local.get $1
   i32.const 1
   i32.const 2
   i32.const 15
@@ -16021,17 +18605,17 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=12
-  local.get $6
+  local.get $61
   call $~lib/array/Array<~lib/array/Array<~lib/string/String | null>>#flat
-  local.set $3
+  local.set $59
   i32.const 8
   i32.const 2
   i32.const 15
   i32.const 9680
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $3
+  local.set $58
+  local.get $59
   i32.load offset=12
   i32.const 8
   i32.ne
@@ -16044,21 +18628,21 @@
    unreachable
   end
   i32.const 0
-  local.set $10
+  local.set $35
   loop $for-loop|2
-   local.get $10
-   local.get $4
+   local.get $35
+   local.get $58
    i32.load offset=12
    i32.lt_s
    if
-    local.get $3
-    local.get $10
+    local.get $59
+    local.get $35
     call $~lib/array/Array<std/array/Ref | null>#__get
-    local.tee $8
-    local.get $4
-    local.get $10
+    local.tee $0
+    local.get $58
+    local.get $35
     call $~lib/array/Array<std/array/Ref | null>#__get
-    local.tee $9
+    local.tee $1
     call $~lib/string/String.__eq
     i32.eqz
     if
@@ -16069,14 +18653,28 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $8
-    call $~lib/rt/pure/__release
-    local.get $9
-    call $~lib/rt/pure/__release
-    local.get $10
+    local.get $0
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $0
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $1
+    i32.const 9744
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $35
     i32.const 1
     i32.add
-    local.set $10
+    local.set $35
     br $for-loop|2
    end
   end
@@ -16086,9 +18684,9 @@
   i32.const 0
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $10
+  local.tee $0
   i32.load offset=4
-  local.tee $8
+  local.tee $1
   i32.const 0
   i32.const 2
   i32.const 3
@@ -16096,7 +18694,7 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
+  local.get $1
   i32.const 0
   i32.const 2
   i32.const 3
@@ -16104,9 +18702,9 @@
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
   i32.store offset=4
-  local.get $10
+  local.get $0
   call $~lib/array/Array<~lib/array/Array<i32>>#flat
-  local.tee $8
+  local.tee $1
   i32.load offset=12
   if
    i32.const 0
@@ -16116,34 +18714,132 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $10
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $16
-  call $~lib/rt/pure/__release
-  local.get $25
-  call $~lib/rt/pure/__release
-  local.get $20
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $33
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $33
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $31
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $31
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $32
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $32
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $27
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $40
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $40
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $39
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $39
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $38
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $38
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $60
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $56
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $56
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $61
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $59
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $58
+  i32.const 9744
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   global.get $~started
diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat
index 4c07bd984a..c600c063d5 100644
--- a/tests/compiler/std/array.untouched.wat
+++ b/tests/compiler/std/array.untouched.wat
@@ -2,31 +2,36 @@
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $f32_f32_=>_i32 (func (param f32 f32) (result i32)))
  (type $f64_f64_=>_i32 (func (param f64 f64) (result i32)))
  (type $none_=>_none (func))
  (type $none_=>_f64 (func (result f64)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32)))
  (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
  (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (type $i32_i32_i32_=>_f32 (func (param i32 i32 i32) (result f32)))
  (type $i32_i32_=>_f64 (func (param i32 i32) (result f64)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i64_=>_none (func (param i64)))
- (type $none_=>_i32 (func (result i32)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
  (type $i64_=>_i64 (func (param i64) (result i64)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
+ (type $f64_=>_f64 (func (param f64) (result f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -230,8 +235,8 @@
  (data (i32.const 9056) " \00\00\00\01\00\00\00\00\00\00\00 \00\00\00\10\"\00\00P\"\00\00\00\00\00\00p\"\00\00\b0\"\00\00\d0\"\00\00\f0\"\00\000#\00\00")
  (data (i32.const 9104) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00")
  (data (i32.const 9120) "\00\00\00\00\01\00\00\00\00\00\00\00\00\00\00\00")
- (table $0 57 funcref)
- (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|1 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0)
+ (table $0 56 funcref)
+ (elem (i32.const 1) $start:std/array~anonymous|0 $start:std/array~anonymous|1 $start:std/array~anonymous|2 $start:std/array~anonymous|3 $start:std/array~anonymous|4 $start:std/array~anonymous|5 $start:std/array~anonymous|6 $start:std/array~anonymous|7 $start:std/array~anonymous|8 $start:std/array~anonymous|9 $start:std/array~anonymous|10 $start:std/array~anonymous|11 $start:std/array~anonymous|12 $start:std/array~anonymous|13 $start:std/array~anonymous|14 $start:std/array~anonymous|15 $start:std/array~anonymous|16 $start:std/array~anonymous|17 $start:std/array~anonymous|18 $start:std/array~anonymous|19 $start:std/array~anonymous|20 $start:std/array~anonymous|21 $start:std/array~anonymous|22 $start:std/array~anonymous|23 $start:std/array~anonymous|24 $start:std/array~anonymous|25 $start:std/array~anonymous|26 $start:std/array~anonymous|27 $start:std/array~anonymous|28 $start:std/array~anonymous|29 $start:std/array~anonymous|30 $start:std/array~anonymous|31 $start:std/array~anonymous|32 $start:std/array~anonymous|33 $start:std/array~anonymous|34 $start:std/array~anonymous|35 $start:std/array~anonymous|36 $start:std/array~anonymous|37 $start:std/array~anonymous|38 $start:std/array~anonymous|39 $start:std/array~anonymous|40 $start:std/array~anonymous|41 $start:std/array~anonymous|42 $~lib/util/sort/COMPARATOR<f32>~anonymous|0 $~lib/util/sort/COMPARATOR<f64>~anonymous|0 $~lib/util/sort/COMPARATOR<i32>~anonymous|0 $~lib/util/sort/COMPARATOR<u32>~anonymous|0 $start:std/array~anonymous|43 $start:std/array~anonymous|44 $start:std/array~anonymous|45 $start:std/array~anonymous|46 $start:std/array~anonymous|47 $start:std/array~anonymous|48 $~lib/util/sort/COMPARATOR<~lib/string/String | null>~anonymous|0 $~lib/util/sort/COMPARATOR<~lib/string/String>~anonymous|0)
  (global $~lib/rt/tlsf/ROOT (mut i32) (i32.const 0))
  (global $~lib/ASC_LOW_MEMORY_LIMIT i32 (i32.const 0))
  (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0))
@@ -261,6 +266,69 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -269,9 +337,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -284,7 +349,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -311,7 +376,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -365,7 +430,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -390,77 +455,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -477,6 +500,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -488,8 +517,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -497,7 +524,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -514,28 +541,18 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -546,44 +563,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -591,30 +598,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 128
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -633,22 +636,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -674,7 +677,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -686,18 +689,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 128
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -751,27 +754,15 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -786,24 +777,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -813,31 +790,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -845,8 +806,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -872,24 +831,22 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -897,7 +854,7 @@
    if
     i32.const 0
     i32.const 128
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -905,16 +862,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -930,7 +887,7 @@
    if
     i32.const 0
     i32.const 128
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -939,8 +896,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -951,49 +908,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -1006,10 +959,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -1059,73 +1008,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1138,11 +1060,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1162,7 +1084,7 @@
   if
    i32.const 176
    i32.const 128
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1188,9 +1110,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1258,31 +1177,24 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1295,79 +1207,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 128
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1404,9 +1285,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1420,12 +1299,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1435,7 +1314,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1472,7 +1351,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1523,29 +1402,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1565,7 +1424,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1612,7 +1471,7 @@
      if
       i32.const 0
       i32.const 128
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1633,7 +1492,7 @@
     if
      i32.const 0
      i32.const 128
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1654,7 +1513,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1689,343 +1548,338 @@
   i32.const 16
   i32.add
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
-    i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
-   end
-  end
- )
- (func $~lib/rt/pure/increment (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
+  i32.const 0
   i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
+  i32.gt_s
+  drop
+  local.get $2
   i32.eqz
   if
-   i32.const 0
-   i32.const 240
-   i32.const 109
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   return
   end
   local.get $0
-  local.get $1
-  i32.const 1
+  local.get $2
   i32.add
-  i32.store offset=4
-  i32.const 1
-  drop
-  local.get $0
-  call $~lib/rt/rtrace/onincrement
-  i32.const 1
-  drop
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 240
-   i32.const 112
-   i32.const 14
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
+  i32.const 4
+  i32.sub
+  local.set $3
   local.get $0
-  global.get $~lib/heap/__heap_base
-  i32.gt_u
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
   if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/increment
+   return
   end
   local.get $0
- )
- (func $~lib/rt/pure/__release (param $0 i32)
+  local.get $1
+  i32.store8 offset=1
   local.get $0
-  global.get $~lib/heap/__heap_base
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
- (func $~lib/array/Array<i32>#constructor (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $1
-  i32.const 1073741808
-  i32.const 2
-  i32.shr_u
-  i32.gt_u
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
   if
-   i32.const 32
-   i32.const 80
-   i32.const 57
-   i32.const 60
-   call $~lib/builtins/abort
-   unreachable
+   return
   end
+  local.get $0
   local.get $1
-  i32.const 2
-  i32.shl
-  local.set $2
-  local.get $2
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $3
+  i32.store8 offset=3
   local.get $3
-  i32.const 0
+  local.get $1
+  i32.store8
   local.get $2
-  call $~lib/memory/memory.fill
-  local.get $0
-  i32.eqz
+  i32.const 8
+  i32.le_u
   if
-   i32.const 16
-   i32.const 3
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.set $0
+   return
   end
-  local.get $0
   i32.const 0
-  i32.store
   local.get $0
-  i32.const 0
-  i32.store offset=4
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
   local.get $0
-  i32.const 0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
+   local.set $7
+   local.get $7
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
+    i32.const 32
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
+   end
+  end
+ )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
+ (func $~lib/rt/pure/increment (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 240
+   i32.const 109
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  i32.const 1
+  drop
+  local.get $0
+  call $~lib/rt/rtrace/onincrement
+  i32.const 1
+  drop
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 240
+   i32.const 112
+   i32.const 14
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/__heap_base
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/__release (param $0 i32)
+  local.get $0
+  global.get $~lib/heap/__heap_base
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/array/Array<i32>#constructor (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $1
+  i32.const 1073741808
+  i32.const 2
+  i32.shr_u
+  i32.gt_u
+  if
+   i32.const 32
+   i32.const 80
+   i32.const 57
+   i32.const 60
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  i32.shl
+  local.set $2
+  local.get $2
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.set $3
+  local.get $3
+  i32.const 0
+  local.get $2
+  call $~lib/memory/memory.fill
+  local.get $0
+  i32.eqz
+  if
+   i32.const 16
+   i32.const 3
+   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/pure/__retain
+   local.set $0
+  end
+  local.get $0
+  i32.const 0
+  i32.store
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
   i32.store offset=8
   local.get $0
   i32.const 0
@@ -3278,251 +3132,246 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
-     end
-    end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
-      i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      br $while-continue|0
      end
     end
-    loop $while-continue|5
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
-      i32.const 1
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
       i32.sub
-      local.tee $3
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      local.get $4
-      local.get $3
+      local.set $0
+      local.get $1
+      i32.const 8
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      local.set $1
+      br $while-continue|1
      end
     end
    end
-  end
- )
- (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/__alloc
-  local.set $3
-  local.get $2
-  if
-   local.get $3
-   local.get $2
-   local.get $0
-   call $~lib/memory/memory.copy
-  end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
+  end
+ )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
+ (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/__alloc
+  local.set $3
+  local.get $2
+  if
+   local.get $3
+   local.get $2
+   local.get $0
+   call $~lib/memory/memory.copy
+  end
   local.get $3
  )
  (func $~lib/rt/__allocArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
@@ -4047,7 +3896,7 @@
   if
    i32.const 0
    i32.const 128
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4104,22 +3953,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -4130,25 +3969,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
@@ -7178,7 +7017,7 @@
   if
    i32.const 0
    i32.const 4032
-   i32.const 1404
+   i32.const 1381
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -7569,14 +7408,29 @@
   local.get $12
   f32.store
  )
+ (func $~lib/util/sort/SORT<f32> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  drop
+  local.get $1
+  i32.const 256
+  i32.lt_s
+  if
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/insertionSort<f32>
+  else
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/weakHeapSort<f32>
+  end
+ )
  (func $~lib/array/Array<f32>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 f32)
   (local $5 f32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   i32.load offset=12
   local.set $2
@@ -7622,27 +7476,9 @@
    return
   end
   local.get $3
-  local.set $8
   local.get $2
-  local.set $7
   local.get $1
-  local.set $6
-  i32.const 0
-  drop
-  local.get $7
-  i32.const 256
-  i32.lt_s
-  if
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/sort/insertionSort<f32>
-  else
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/sort/weakHeapSort<f32>
-  end
+  call $~lib/util/sort/SORT<f32>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -7679,6 +7515,18 @@
   i32.lt_s
   i32.sub
  )
+ (func $~lib/util/sort/COMPARATOR<f32> (result i32)
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 44
+  return
+ )
  (func $~lib/array/Array<f32>#sort@varargs (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
@@ -7688,18 +7536,7 @@
     end
     unreachable
    end
-   block $~lib/util/sort/COMPARATOR<f32>|inlined.0 (result i32)
-    i32.const 0
-    drop
-    i32.const 1
-    drop
-    i32.const 4
-    i32.const 4
-    i32.eq
-    drop
-    i32.const 44
-    br $~lib/util/sort/COMPARATOR<f32>|inlined.0
-   end
+   call $~lib/util/sort/COMPARATOR<f32>
    local.set $1
   end
   local.get $0
@@ -8194,14 +8031,29 @@
   local.get $12
   f64.store
  )
+ (func $~lib/util/sort/SORT<f64> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  drop
+  local.get $1
+  i32.const 256
+  i32.lt_s
+  if
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/insertionSort<f64>
+  else
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/weakHeapSort<f64>
+  end
+ )
  (func $~lib/array/Array<f64>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 f64)
   (local $5 f64)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   i32.load offset=12
   local.set $2
@@ -8247,27 +8099,9 @@
    return
   end
   local.get $3
-  local.set $8
   local.get $2
-  local.set $7
   local.get $1
-  local.set $6
-  i32.const 0
-  drop
-  local.get $7
-  i32.const 256
-  i32.lt_s
-  if
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/sort/insertionSort<f64>
-  else
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/sort/weakHeapSort<f64>
-  end
+  call $~lib/util/sort/SORT<f64>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -8304,6 +8138,18 @@
   i64.lt_s
   i32.sub
  )
+ (func $~lib/util/sort/COMPARATOR<f64> (result i32)
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 45
+  return
+ )
  (func $~lib/array/Array<f64>#sort@varargs (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
@@ -8313,18 +8159,7 @@
     end
     unreachable
    end
-   block $~lib/util/sort/COMPARATOR<f64>|inlined.0 (result i32)
-    i32.const 0
-    drop
-    i32.const 1
-    drop
-    i32.const 8
-    i32.const 4
-    i32.eq
-    drop
-    i32.const 45
-    br $~lib/util/sort/COMPARATOR<f64>|inlined.0
-   end
+   call $~lib/util/sort/COMPARATOR<f64>
    local.set $1
   end
   local.get $0
@@ -8854,12 +8689,29 @@
   local.get $12
   i32.store
  )
+ (func $~lib/util/sort/SORT<i32> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  drop
+  local.get $1
+  i32.const 256
+  i32.lt_s
+  if
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/insertionSort<i32>
+  else
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/weakHeapSort<i32>
+  end
+ )
  (func $~lib/array/Array<i32>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.load offset=12
   local.set $2
@@ -8905,27 +8757,9 @@
    return
   end
   local.get $3
-  local.set $6
   local.get $2
-  local.set $5
   local.get $1
-  local.set $4
-  i32.const 0
-  drop
-  local.get $5
-  i32.const 256
-  i32.lt_s
-  if
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/sort/insertionSort<i32>
-  else
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/sort/weakHeapSort<i32>
-  end
+  call $~lib/util/sort/SORT<i32>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -8934,6 +8768,21 @@
   local.get $1
   i32.sub
  )
+ (func $~lib/util/sort/COMPARATOR<i32> (result i32)
+  i32.const 1
+  drop
+  i32.const 1
+  if (result i32)
+   i32.const 4
+   i32.const 4
+   i32.le_u
+  else
+   i32.const 0
+  end
+  drop
+  i32.const 46
+  return
+ )
  (func $~lib/array/Array<i32>#sort@varargs (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
@@ -8943,21 +8792,7 @@
     end
     unreachable
    end
-   block $~lib/util/sort/COMPARATOR<i32>|inlined.0 (result i32)
-    i32.const 1
-    drop
-    i32.const 1
-    if (result i32)
-     i32.const 4
-     i32.const 4
-     i32.le_u
-    else
-     i32.const 0
-    end
-    drop
-    i32.const 46
-    br $~lib/util/sort/COMPARATOR<i32>|inlined.0
-   end
+   call $~lib/util/sort/COMPARATOR<i32>
    local.set $1
   end
   local.get $0
@@ -9343,12 +9178,29 @@
   local.get $12
   i32.store
  )
+ (func $~lib/util/sort/SORT<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  drop
+  local.get $1
+  i32.const 256
+  i32.lt_s
+  if
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/insertionSort<u32>
+  else
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/weakHeapSort<u32>
+  end
+ )
  (func $~lib/array/Array<u32>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.load offset=12
   local.set $2
@@ -9394,27 +9246,9 @@
    return
   end
   local.get $3
-  local.set $6
   local.get $2
-  local.set $5
   local.get $1
-  local.set $4
-  i32.const 0
-  drop
-  local.get $5
-  i32.const 256
-  i32.lt_s
-  if
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/sort/insertionSort<u32>
-  else
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/sort/weakHeapSort<u32>
-  end
+  call $~lib/util/sort/SORT<u32>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -9427,6 +9261,21 @@
   i32.lt_u
   i32.sub
  )
+ (func $~lib/util/sort/COMPARATOR<u32> (result i32)
+  i32.const 1
+  drop
+  i32.const 0
+  if (result i32)
+   i32.const 4
+   i32.const 4
+   i32.le_u
+  else
+   i32.const 0
+  end
+  drop
+  i32.const 47
+  return
+ )
  (func $~lib/array/Array<u32>#sort@varargs (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
@@ -9436,21 +9285,7 @@
     end
     unreachable
    end
-   block $~lib/util/sort/COMPARATOR<u32>|inlined.0 (result i32)
-    i32.const 1
-    drop
-    i32.const 0
-    if (result i32)
-     i32.const 4
-     i32.const 4
-     i32.le_u
-    else
-     i32.const 0
-    end
-    drop
-    i32.const 47
-    br $~lib/util/sort/COMPARATOR<u32>|inlined.0
-   end
+   call $~lib/util/sort/COMPARATOR<u32>
    local.set $1
   end
   local.get $0
@@ -9577,11 +9412,6 @@
   end
   local.get $1
  )
- (func $~lib/util/sort/COMPARATOR<i32>~anonymous|1 (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  i32.sub
- )
  (func $std/array/isSorted<i32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -9667,21 +9497,7 @@
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  block $~lib/util/sort/COMPARATOR<i32>|inlined.1 (result i32)
-   i32.const 1
-   drop
-   i32.const 1
-   if (result i32)
-    i32.const 4
-    i32.const 4
-    i32.le_u
-   else
-    i32.const 0
-   end
-   drop
-   i32.const 48
-   br $~lib/util/sort/COMPARATOR<i32>|inlined.1
-  end
+  call $~lib/util/sort/COMPARATOR<i32>
   call $std/array/assertSorted<i32>
   local.get $0
   call $~lib/rt/pure/__release
@@ -10024,6 +9840,14 @@
    end
   end
  )
+ (func $~lib/util/sort/SORT<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 1
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/sort/insertionSort<~lib/array/Array<i32>>
+ )
  (func $~lib/array/Array<~lib/array/Array<i32>>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -10083,17 +9907,9 @@
    return
   end
   local.get $3
-  local.set $5
   local.get $2
-  local.set $4
   local.get $1
-  local.set $6
-  i32.const 1
-  drop
-  local.get $5
-  local.get $4
-  local.get $6
-  call $~lib/util/sort/insertionSort<~lib/array/Array<i32>>
+  call $~lib/util/sort/SORT<~lib/array/Array<i32>>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -10566,6 +10382,14 @@
    end
   end
  )
+ (func $~lib/util/sort/SORT<std/array/Proxy<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 1
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/sort/insertionSort<std/array/Proxy<i32>>
+ )
  (func $~lib/array/Array<std/array/Proxy<i32>>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -10625,17 +10449,9 @@
    return
   end
   local.get $3
-  local.set $5
   local.get $2
-  local.set $4
   local.get $1
-  local.set $6
-  i32.const 1
-  drop
-  local.get $5
-  local.get $4
-  local.get $6
-  call $~lib/util/sort/insertionSort<std/array/Proxy<i32>>
+  call $~lib/util/sort/SORT<std/array/Proxy<i32>>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -10880,6 +10696,14 @@
    end
   end
  )
+ (func $~lib/util/sort/SORT<~lib/string/String | null> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 1
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/sort/insertionSort<~lib/string/String | null>
+ )
  (func $~lib/array/Array<~lib/string/String | null>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -10939,17 +10763,9 @@
    return
   end
   local.get $3
-  local.set $5
   local.get $2
-  local.set $4
   local.get $1
-  local.set $6
-  i32.const 1
-  drop
-  local.get $5
-  local.get $4
-  local.get $6
-  call $~lib/util/sort/insertionSort<~lib/string/String | null>
+  call $~lib/util/sort/SORT<~lib/string/String | null>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -11324,6 +11140,16 @@
   call $~lib/rt/pure/__release
   local.get $2
  )
+ (func $~lib/util/sort/COMPARATOR<~lib/string/String | null> (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 54
+  return
+ )
  (func $std/array/assertSorted<~lib/string/String | null>@varargs (param $0 i32) (param $1 i32)
   block $1of1
    block $0of1
@@ -11335,16 +11161,7 @@
     end
     unreachable
    end
-   block $~lib/util/sort/COMPARATOR<~lib/string/String | null>|inlined.0 (result i32)
-    i32.const 0
-    drop
-    i32.const 0
-    drop
-    i32.const 1
-    drop
-    i32.const 55
-    br $~lib/util/sort/COMPARATOR<~lib/string/String | null>|inlined.0
-   end
+   call $~lib/util/sort/COMPARATOR<~lib/string/String | null>
    local.set $1
   end
   local.get $0
@@ -11622,6 +11439,10 @@
   i32.store offset=12
   local.get $0
  )
+ (func $~lib/math/NativeMath.floor (param $0 f64) (result f64)
+  local.get $0
+  f64.floor
+ )
  (func $~lib/string/String#charAt (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
@@ -11751,11 +11572,10 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 f64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   i32.const 5056
   local.set $1
   i32.const 0
@@ -11774,30 +11594,28 @@
     call $~lib/string/String#get:length
     f64.convert_i32_s
     f64.mul
-    local.set $4
-    local.get $4
-    f64.floor
+    call $~lib/math/NativeMath.floor
     i32.trunc_f64_s
     call $~lib/string/String#charAt
-    local.tee $5
+    local.tee $4
     call $~lib/string/String.__concat
+    local.tee $5
     local.tee $6
-    local.tee $7
     local.get $1
-    local.tee $8
+    local.tee $7
     i32.ne
     if
-     local.get $7
+     local.get $6
      call $~lib/rt/pure/__retain
-     local.set $7
-     local.get $8
+     local.set $6
+     local.get $7
      call $~lib/rt/pure/__release
     end
-    local.get $7
+    local.get $6
     local.set $1
-    local.get $5
+    local.get $4
     call $~lib/rt/pure/__release
-    local.get $6
+    local.get $5
     call $~lib/rt/pure/__release
     local.get $2
     i32.const 1
@@ -12017,6 +11835,14 @@
    end
   end
  )
+ (func $~lib/util/sort/SORT<~lib/string/String> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 1
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/sort/insertionSort<~lib/string/String>
+ )
  (func $~lib/array/Array<~lib/string/String>#sort (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -12076,17 +11902,9 @@
    return
   end
   local.get $3
-  local.set $5
   local.get $2
-  local.set $4
   local.get $1
-  local.set $6
-  i32.const 1
-  drop
-  local.get $5
-  local.get $4
-  local.get $6
-  call $~lib/util/sort/insertionSort<~lib/string/String>
+  call $~lib/util/sort/SORT<~lib/string/String>
   local.get $0
   call $~lib/rt/pure/__retain
  )
@@ -12339,6 +12157,16 @@
   call $~lib/rt/pure/__release
   local.get $2
  )
+ (func $~lib/util/sort/COMPARATOR<~lib/string/String> (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 55
+  return
+ )
  (func $std/array/assertSorted<~lib/string/String>@varargs (param $0 i32) (param $1 i32)
   block $1of1
    block $0of1
@@ -12350,16 +12178,7 @@
     end
     unreachable
    end
-   block $~lib/util/sort/COMPARATOR<~lib/string/String>|inlined.0 (result i32)
-    i32.const 0
-    drop
-    i32.const 0
-    drop
-    i32.const 1
-    drop
-    i32.const 56
-    br $~lib/util/sort/COMPARATOR<~lib/string/String>|inlined.0
-   end
+   call $~lib/util/sort/COMPARATOR<~lib/string/String>
    local.set $1
   end
   local.get $0
@@ -12868,13 +12687,20 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -12904,19 +12730,9 @@
   call $~lib/rt/tlsf/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
@@ -12943,9 +12759,6 @@
  (func $~lib/util/number/itoa_stream<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -13010,19 +12823,9 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -13198,9 +13001,6 @@
  (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   i32.eqz
   if
@@ -13217,19 +13017,9 @@
   call $~lib/rt/tlsf/__alloc
   local.set $2
   local.get $2
-  local.set $5
   local.get $0
-  local.set $4
   local.get $1
-  local.set $3
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $5
-  local.get $4
-  local.get $3
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $2
   call $~lib/rt/pure/__retain
  )
@@ -13250,9 +13040,6 @@
  (func $~lib/util/number/itoa_stream<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -13293,19 +13080,9 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -13478,90 +13255,324 @@
   local.get $4
   return
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i64)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 i32)
-  (local $17 i32)
-  (local $18 i32)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
-  i32.const 0
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
   local.get $4
   i32.sub
-  local.set $7
-  i64.const 1
-  local.get $7
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
   i64.extend_i32_s
   i64.shl
-  local.set $8
-  local.get $8
   i64.const 1
   i64.sub
-  local.set $9
-  local.get $3
   local.get $1
-  i64.sub
-  local.set $10
-  local.get $4
-  local.set $11
+  local.get $5
+  i32.sub
   local.get $3
-  local.get $7
+  i32.sub
   i64.extend_i32_s
-  i64.shr_u
-  i32.wrap_i64
-  local.set $12
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
   local.get $3
-  local.get $9
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
+  local.get $1
+  f64.ne
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 6288
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 6984
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
   i64.and
-  local.set $13
-  local.get $12
-  call $~lib/util/number/decimalCount32
-  local.set $14
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $3
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
   local.get $6
-  local.set $15
-  loop $while-continue|0
-   local.get $14
-   i32.const 0
-   i32.gt_s
-   local.set $16
-   local.get $16
-   if
-    block $break|1
-     block $case10|1
-      block $case9|1
-       block $case8|1
-        block $case7|1
-         block $case6|1
-          block $case5|1
-           block $case4|1
-            block $case3|1
-             block $case2|1
-              block $case1|1
-               block $case0|1
-                local.get $14
-                local.set $18
-                local.get $18
-                i32.const 10
-                i32.eq
-                br_if $case0|1
-                local.get $18
-                i32.const 9
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
+    i64.sub
+    local.get $4
+    i64.ge_u
+   else
+    i32.const 0
+   end
+   if (result i32)
+    local.get $3
+    local.get $4
+    i64.add
+    local.get $5
+    i64.lt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
+     local.get $4
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
+    end
+   else
+    i32.const 0
+   end
+   local.set $8
+   local.get $8
+   if
+    local.get $7
+    i32.const 1
+    i32.sub
+    local.set $7
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $6
+  local.get $7
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i64)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i32)
+  (local $13 i64)
+  (local $14 i32)
+  (local $15 i32)
+  (local $16 i32)
+  (local $17 i32)
+  (local $18 i32)
+  (local $19 i64)
+  (local $20 i64)
+  i32.const 0
+  local.get $4
+  i32.sub
+  local.set $7
+  i64.const 1
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $8
+  local.get $8
+  i64.const 1
+  i64.sub
+  local.set $9
+  local.get $3
+  local.get $1
+  i64.sub
+  local.set $10
+  local.get $4
+  local.set $11
+  local.get $3
+  local.get $7
+  i64.extend_i32_s
+  i64.shr_u
+  i32.wrap_i64
+  local.set $12
+  local.get $3
+  local.get $9
+  i64.and
+  local.set $13
+  local.get $12
+  call $~lib/util/number/decimalCount32
+  local.set $14
+  local.get $6
+  local.set $15
+  loop $while-continue|0
+   local.get $14
+   i32.const 0
+   i32.gt_s
+   local.set $16
+   local.get $16
+   if
+    block $break|1
+     block $case10|1
+      block $case9|1
+       block $case8|1
+        block $case7|1
+         block $case6|1
+          block $case5|1
+           block $case4|1
+            block $case3|1
+             block $case2|1
+              block $case1|1
+               block $case0|1
+                local.get $14
+                local.set $18
+                local.get $18
+                i32.const 10
+                i32.eq
+                br_if $case0|1
+                local.get $18
+                i32.const 9
                 i32.eq
                 br_if $case1|1
                 local.get $18
@@ -13740,13 +13751,9 @@
      i32.add
      global.set $~lib/util/number/_K
      local.get $0
-     local.set $24
      local.get $15
-     local.set $18
      local.get $5
-     local.set $23
      local.get $19
-     local.set $22
      i32.const 7160
      local.get $14
      i32.const 2
@@ -13756,79 +13763,15 @@
      local.get $7
      i64.extend_i32_s
      i64.shl
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  loop $while-continue|2
    i32.const 1
    local.set $16
    local.get $16
@@ -13845,8 +13788,8 @@
     local.get $7
     i64.extend_i32_s
     i64.shr_u
-    local.set $23
-    local.get $23
+    local.set $20
+    local.get $20
     local.get $15
     i64.extend_i32_s
     i64.or
@@ -13855,16 +13798,16 @@
     if
      local.get $0
      local.get $15
-     local.tee $26
+     local.tee $18
      i32.const 1
      i32.add
      local.set $15
-     local.get $26
+     local.get $18
      i32.const 1
      i32.shl
      i32.add
      i32.const 48
-     local.get $23
+     local.get $20
      i32.wrap_i64
      i32.const 65535
      i32.and
@@ -13899,125 +13842,188 @@
      i64.mul
      local.set $10
      local.get $0
-     local.set $18
      local.get $15
-     local.set $27
      local.get $5
-     local.set $28
      local.get $13
-     local.set $22
      local.get $8
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
-    br $while-continue|4
+    br $while-continue|2
    end
   end
   unreachable
  )
- (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
+  (local $5 i64)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
+  (local $8 i64)
   (local $9 i32)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i32)
-  local.get $2
-  i32.eqz
-  if
-   local.get $0
-   local.get $1
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 46
-   i32.const 48
-   i32.const 16
-   i32.shl
-   i32.or
-   i32.store
-   local.get $1
-   i32.const 2
-   i32.add
-   return
-  end
-  local.get $1
-  local.get $2
-  i32.add
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
   local.set $3
-  local.get $1
   local.get $3
-  i32.le_s
-  if (result i32)
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $3
+  i64.const 4503599627370495
+  i64.and
+  local.set $5
+  local.get $4
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
+  i32.const 1
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
+  i32.add
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
+  i64.clz
+  i32.wrap_i64
+  local.set $7
+  local.get $6
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $6
+  local.get $4
+  local.get $7
+  i32.sub
+  local.set $4
+  global.get $~lib/util/number/_frc_pow
+  local.set $8
+  global.get $~lib/util/number/_exp_pow
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $11
+  global.get $~lib/util/number/_frc_plus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.set $12
+  global.get $~lib/util/number/_exp
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $13
+  global.get $~lib/util/number/_frc_minus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  local.set $14
+  local.get $12
+  local.get $14
+  i64.sub
+  local.set $15
+  local.get $1
+  local.get $10
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.set $2
+  local.get $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
+ )
+ (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $1
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 46
+   i32.const 48
+   i32.const 16
+   i32.shl
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 2
+   i32.add
+   return
+  end
+  local.get $1
+  local.get $2
+  i32.add
+  local.set $3
+  local.get $1
+  local.get $3
+  i32.le_s
+  if (result i32)
    local.get $3
    i32.const 21
    i32.le_s
@@ -14155,580 +14161,114 @@
        i32.const 1
        i32.add
        local.set $5
-       br $for-loop|1
-      end
-     end
-     local.get $1
-     local.get $4
-     i32.add
-     return
-    else
-     local.get $1
-     i32.const 1
-     i32.eq
-     if
-      local.get $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      i32.const 4
-      i32.add
-      local.set $5
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $7
-      local.set $1
-      local.get $1
-      i32.const 2
-      i32.add
-      return
-     else
-      local.get $1
-      i32.const 1
-      i32.shl
-      local.set $7
-      local.get $0
-      i32.const 4
-      i32.add
-      local.get $0
-      i32.const 2
-      i32.add
-      local.get $7
-      i32.const 2
-      i32.sub
-      call $~lib/memory/memory.copy
-      local.get $0
-      i32.const 46
-      i32.store16 offset=2
-      local.get $0
-      local.get $7
-      i32.add
-      i32.const 101
-      i32.store16 offset=2
-      local.get $1
-      local.get $0
-      local.get $7
-      i32.add
-      i32.const 4
-      i32.add
-      local.set $9
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
-      i32.add
-      local.set $1
-      local.get $1
-      i32.const 2
-      i32.add
-      return
-     end
-     unreachable
-    end
-    unreachable
-   end
-   unreachable
-  end
-  unreachable
- )
- (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
-  local.get $1
-  f64.const 0
-  f64.lt
-  local.set $2
-  local.get $2
-  if
-   local.get $1
-   f64.neg
-   local.set $1
-   local.get $0
-   i32.const 45
-   i32.store16
-  end
-  local.get $1
-  local.set $5
-  local.get $0
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
-  i64.reinterpret_f64
-  local.set $6
-  local.get $6
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.set $7
-  local.get $6
-  i64.const 4503599627370495
-  i64.and
-  local.set $8
-  local.get $7
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 6288
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 6984
-  local.get $14
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $9
-  local.get $7
-  local.get $14
-  i32.sub
-  local.set $7
-  global.get $~lib/util/number/_frc_pow
-  local.set $12
-  global.get $~lib/util/number/_exp_pow
-  local.set $15
-  local.get $9
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
-  global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
-  i64.const 1
-  i64.sub
-  local.set $25
-  global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
-  local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $26
-  global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
-  i64.const 1
-  i64.add
-  local.set $27
-  local.get $25
-  local.get $27
-  i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
-  local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
-  local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
+       br $for-loop|1
+      end
+     end
+     local.get $1
+     local.get $4
+     i32.add
+     return
+    else
+     local.get $1
+     i32.const 1
+     i32.eq
+     if
+      local.get $0
+      i32.const 101
+      i32.store16 offset=2
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     else
+      local.get $1
+      i32.const 1
+      i32.shl
+      local.set $4
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $0
+      i32.const 2
+      i32.add
+      local.get $4
+      i32.const 2
+      i32.sub
+      call $~lib/memory/memory.copy
+      local.get $0
+      i32.const 46
+      i32.store16 offset=2
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 101
+      i32.store16 offset=2
+      local.get $1
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      i32.add
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     end
+     unreachable
+    end
+    unreachable
+   end
+   unreachable
+  end
+  unreachable
+ )
+ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  f64.const 0
+  f64.lt
+  local.set $2
+  local.get $2
+  if
+   local.get $1
+   f64.neg
+   local.set $1
+   local.get $0
+   i32.const 45
+   i32.store16
+  end
+  local.get $1
+  local.get $0
+  local.get $2
+  call $~lib/util/number/grisu2
+  local.set $3
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
@@ -15832,9 +15372,6 @@
  (func $~lib/util/number/itoa_stream<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -15915,23 +15452,13 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
   i32.const 24
   i32.shl
   i32.const 24
   i32.shr_s
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -16128,9 +15655,6 @@
  (func $~lib/util/number/itoa_stream<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -16177,21 +15701,11 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
   i32.const 65535
   i32.and
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -16551,14 +16065,20 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa64_lut
+ )
  (func $~lib/util/number/utoa64 (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i64)
   local.get $0
   i64.const 0
   i64.ne
@@ -16585,19 +16105,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $1
    local.get $1
-   local.set $6
    local.get $2
-   local.set $5
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
@@ -16609,19 +16119,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $1
    local.get $1
-   local.set $5
    local.get $0
-   local.set $7
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $5
-   local.get $7
-   local.get $4
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
   call $~lib/rt/pure/__retain
@@ -16644,10 +16144,6 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
   local.get $0
   local.get $1
   i32.const 1
@@ -16696,19 +16192,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $8
    local.get $5
-   local.set $7
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $4
    local.get $2
@@ -16716,19 +16202,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $7
    local.get $2
-   local.set $9
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $7
-   local.get $9
-   local.get $6
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $4
  )
@@ -16912,10 +16388,6 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
   local.get $0
   i64.const 0
   i64.ne
@@ -16956,19 +16428,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $2
    local.get $2
-   local.set $7
    local.get $3
-   local.set $6
    local.get $4
-   local.set $5
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $7
-   local.get $6
-   local.get $5
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
@@ -16982,19 +16444,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $2
    local.get $2
-   local.set $6
    local.get $0
-   local.set $8
    local.get $4
-   local.set $5
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $6
-   local.get $8
-   local.get $5
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
   if
@@ -17023,10 +16475,6 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
   local.get $0
   local.get $1
   i32.const 1
@@ -17099,19 +16547,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $8
    local.get $5
-   local.set $7
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $4
    local.get $2
@@ -17119,19 +16557,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $7
    local.get $2
-   local.set $9
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $7
-   local.get $9
-   local.get $6
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $4
  )
@@ -17587,9 +17015,6 @@
  (func $~lib/util/number/itoa_stream<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -17636,21 +17061,11 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
   i32.const 255
   i32.and
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -24059,16 +23474,16 @@
   call $std/array/createRandomOrderedArray
   local.set $29
   local.get $31
-  i32.const 49
+  i32.const 48
   call $std/array/assertSorted<i32>
   local.get $31
-  i32.const 50
+  i32.const 49
   call $std/array/assertSorted<i32>
   local.get $29
-  i32.const 51
+  i32.const 50
   call $std/array/assertSorted<i32>
   local.get $29
-  i32.const 52
+  i32.const 51
   call $std/array/assertSorted<i32>
   local.get $31
   call $~lib/rt/pure/__release
@@ -24078,7 +23493,7 @@
   call $std/array/createReverseOrderedNestedArray
   local.set $29
   local.get $29
-  i32.const 53
+  i32.const 52
   call $std/array/assertSorted<~lib/array/Array<i32>>
   local.get $29
   call $~lib/rt/pure/__release
@@ -24086,7 +23501,7 @@
   call $std/array/createReverseOrderedElementsArray
   local.set $29
   local.get $29
-  i32.const 54
+  i32.const 53
   call $std/array/assertSorted<std/array/Proxy<i32>>
   local.get $29
   call $~lib/rt/pure/__release
diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat
index ac4432de51..6513852ce3 100644
--- a/tests/compiler/std/arraybuffer.optimized.wat
+++ b/tests/compiler/std/arraybuffer.optimized.wat
@@ -2,10 +2,10 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -27,6 +27,31 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -41,7 +66,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -63,7 +88,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -82,23 +107,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -106,61 +131,53 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -168,9 +185,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -179,7 +194,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -202,7 +217,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -216,7 +231,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -229,9 +244,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -240,7 +255,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -249,7 +264,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -267,9 +282,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -289,7 +304,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -322,8 +337,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -344,27 +359,27 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1152
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -393,13 +408,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -407,21 +422,15 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -436,31 +445,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -490,7 +496,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -507,7 +513,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -535,7 +541,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -587,7 +593,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -608,7 +614,8 @@
     unreachable
    end
    i32.const 1440
-   local.tee $0
+   local.set $2
+   i32.const 1440
    i32.const 0
    i32.store
    i32.const 3008
@@ -627,27 +634,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1440
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -667,10 +668,11 @@
    i32.const 1440
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -680,23 +682,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -725,7 +726,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -743,16 +744,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -773,26 +768,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1152
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -810,7 +801,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -855,13 +846,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -881,7 +873,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -892,7 +884,7 @@
   if
    i32.const 1200
    i32.const 1152
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -992,7 +984,7 @@
     if
      i32.const 0
      i32.const 1152
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1008,7 +1000,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1033,169 +1025,171 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
   local.get $0
   local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
   i32.add
- )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -1250,176 +1244,178 @@
   end
   local.get $0
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
@@ -1452,6 +1448,7 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $2
   i32.const 0
   i32.lt_s
@@ -1483,27 +1480,18 @@
   select
   local.tee $2
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $0
   local.get $1
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1440
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -1521,21 +1509,27 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 1
   local.get $1
   i32.shl
   local.tee $3
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $3
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $0
   i32.eqz
   if
+   call $~lib/rt/tlsf/maybeInitialize
    i32.const 12
    i32.const 2
-   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    call $~lib/rt/pure/__retain
    local.set $0
   end
@@ -1559,7 +1553,14 @@
    call $~lib/rt/pure/__retain
    local.set $1
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 1440
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $0
   local.get $1
@@ -1586,15 +1587,18 @@
   (local $7 i32)
   (local $8 i32)
   (local $9 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 8
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
   i32.const 8
-  call $~lib/memory/memory.fill
-  local.get $1
+  call $~lib/util/memory/memset
+  local.get $0
   call $~lib/rt/pure/__retain
-  local.tee $9
+  local.tee $3
   i32.const 16
   i32.sub
   i32.load offset=12
@@ -1608,7 +1612,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const 0
   i32.const 1073741808
   call $~lib/arraybuffer/ArrayBuffer#slice
@@ -1627,7 +1631,7 @@
    unreachable
   end
   local.get $1
-  local.get $9
+  local.get $3
   i32.eq
   if
    i32.const 0
@@ -1637,13 +1641,20 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const 1
   i32.const 1073741808
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   i32.const 16
   i32.sub
@@ -1658,12 +1669,19 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const -1
   i32.const 1073741808
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const 16
   i32.sub
@@ -1678,12 +1696,19 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const 1
   i32.const 3
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const 16
   i32.sub
@@ -1698,12 +1723,19 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const 1
   i32.const -1
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.tee $0
   i32.const 16
   i32.sub
@@ -1718,14 +1750,20 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const -3
   i32.const -1
   call $~lib/arraybuffer/ArrayBuffer#slice
-  local.set $1
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 16
   i32.sub
   i32.load offset=12
@@ -1739,14 +1777,20 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const -4
   i32.const 42
   call $~lib/arraybuffer/ArrayBuffer#slice
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
   local.get $0
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $0
   i32.const 16
   i32.sub
   i32.load offset=12
@@ -1760,14 +1804,21 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $9
+  local.get $3
   i32.const 42
   i32.const 1073741808
   call $~lib/arraybuffer/ArrayBuffer#slice
-  local.set $7
+  local.set $4
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $7
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
   i32.const 16
   i32.sub
   i32.load offset=12
@@ -1779,7 +1830,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $7
+  local.get $4
   i32.eqz
   if
    i32.const 0
@@ -1789,57 +1840,72 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.const 0
   call $~lib/arraybuffer/ArrayBufferView#constructor
-  local.set $6
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
-  local.set $1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 8
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   i32.const 1376
   i32.const 8
-  call $~lib/memory/memory.copy
-  local.get $1
+  call $~lib/util/memory/memmove
   local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $1
   local.get $0
-  i32.store offset=4
   local.get $1
+  i32.store offset=4
+  local.get $0
   i32.const 8
   i32.store offset=8
-  local.get $1
+  local.get $0
   i32.const 2
   i32.store offset=12
-  local.get $1
+  local.get $0
   call $~lib/rt/pure/__retain
+  local.set $6
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 9
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.const 2
   call $~lib/arraybuffer/ArrayBufferView#constructor
-  local.set $3
-  local.get $6
+  local.set $7
+  local.get $5
   i32.load
-  local.tee $1
+  local.tee $0
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $1
+  local.set $9
+  local.get $1
   i32.const 1073741808
   i32.gt_u
-  local.get $5
   local.get $1
+  local.get $0
   i32.const 16
   i32.sub
   i32.load offset=12
@@ -1853,53 +1919,106 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 15
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $8
+  local.tee $1
   i32.const 0
   i32.store
-  local.get $8
+  local.get $1
   i32.const 0
   i32.store offset=4
-  local.get $8
+  local.get $1
   i32.const 0
   i32.store offset=8
+  local.get $0
+  local.set $2
+  local.get $0
   local.get $1
-  local.set $0
-  local.get $1
-  local.get $8
   i32.load
-  local.tee $2
+  local.tee $8
   i32.ne
   if
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $0
    local.get $2
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $2
+   local.get $8
+   i32.const 1440
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $8
-  local.get $0
+  local.get $1
+  local.get $2
   i32.store
-  local.get $8
   local.get $1
+  local.get $0
   i32.store offset=4
-  local.get $8
-  local.get $5
-  i32.store offset=8
+  local.get $1
   local.get $9
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  call $~lib/rt/pure/__release
+  i32.store offset=8
   local.get $3
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $5
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $7
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 1440
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   call $start:std/arraybuffer
diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat
index c71239ab12..2a9c52fe3e 100644
--- a/tests/compiler/std/arraybuffer.untouched.wat
+++ b/tests/compiler/std/arraybuffer.untouched.wat
@@ -2,9 +2,9 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
@@ -34,6 +34,69 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -42,9 +105,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -57,7 +117,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -84,7 +144,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -138,7 +198,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -163,77 +223,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -250,6 +268,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -261,8 +285,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -270,7 +292,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -287,28 +309,18 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -319,44 +331,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -364,30 +366,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 144
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -406,22 +404,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -447,7 +445,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -459,18 +457,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 144
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -524,27 +522,15 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -559,24 +545,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -586,31 +558,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -618,8 +574,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -645,24 +599,22 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -670,7 +622,7 @@
    if
     i32.const 0
     i32.const 144
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -678,16 +630,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -703,7 +655,7 @@
    if
     i32.const 0
     i32.const 144
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -712,8 +664,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -724,49 +676,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -779,10 +727,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -832,73 +776,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -911,11 +828,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -935,7 +852,7 @@
   if
    i32.const 192
    i32.const 144
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -961,9 +878,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1031,31 +945,24 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1068,79 +975,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 144
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1177,9 +1053,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1193,12 +1067,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1208,7 +1082,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1245,7 +1119,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1296,29 +1170,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1338,7 +1192,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1385,7 +1239,7 @@
      if
       i32.const 0
       i32.const 144
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1406,7 +1260,7 @@
     if
      i32.const 0
      i32.const 144
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1427,7 +1281,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1462,219 +1316,214 @@
   i32.const 16
   i32.add
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/rt/pure/increment (param $0 i32)
   (local $1 i32)
   local.get $0
@@ -2794,238 +2643,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/arraybuffer/ArrayBuffer#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
diff --git a/tests/compiler/std/dataview.optimized.wat b/tests/compiler/std/dataview.optimized.wat
index f112291106..f37fedd18c 100644
--- a/tests/compiler/std/dataview.optimized.wat
+++ b/tests/compiler/std/dataview.optimized.wat
@@ -1,14 +1,14 @@
 (module
- (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $i32_=>_none (func (param i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_f32_i32_=>_none (func (param i32 f32 i32)))
  (type $i32_f64_i32_=>_none (func (param i32 f64 i32)))
  (type $none_=>_i32 (func (result i32)))
@@ -35,6 +35,31 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -49,7 +74,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -71,7 +96,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -90,23 +115,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -114,61 +139,53 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -176,9 +193,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -187,7 +202,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -210,7 +225,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -224,7 +239,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -237,9 +252,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -248,7 +263,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -257,7 +272,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -275,9 +290,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -297,7 +312,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -330,8 +345,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -352,27 +367,27 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1152
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -401,13 +416,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -415,21 +430,15 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -444,31 +453,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -498,7 +504,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -515,7 +521,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -543,7 +549,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -595,7 +601,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -616,7 +622,8 @@
     unreachable
    end
    i32.const 1520
-   local.tee $0
+   local.set $2
+   i32.const 1520
    i32.const 0
    i32.store
    i32.const 3088
@@ -635,27 +642,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1520
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -675,10 +676,11 @@
    i32.const 1520
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -688,23 +690,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -733,7 +734,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -751,16 +752,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -781,26 +776,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1152
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -818,7 +809,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -863,13 +854,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -889,7 +881,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -900,7 +892,7 @@
   if
    i32.const 1200
    i32.const 1152
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1000,7 +992,7 @@
     if
      i32.const 0
      i32.const 1152
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1016,7 +1008,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1041,14 +1033,6 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -1100,24 +1084,16 @@
   end
   local.get $0
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1520
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 8
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   i32.const 0
   i32.store8
@@ -1148,9 +1124,12 @@
   local.get $0
   i32.eqz
   if
+   call $~lib/rt/tlsf/maybeInitialize
    i32.const 12
    i32.const 2
-   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    call $~lib/rt/pure/__retain
    local.set $0
   end
@@ -1173,7 +1152,14 @@
    call $~lib/rt/pure/__retain
    local.set $1
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 1520
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $0
   local.get $1
@@ -1230,9 +1216,12 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $4
   i32.const 0
@@ -1255,7 +1244,14 @@
    call $~lib/rt/pure/__retain
    local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 1520
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $4
   local.get $3
@@ -1270,13 +1266,6 @@
   i32.store offset=8
   local.get $4
  )
- (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load
-  i32.sub
- )
  (func $~lib/polyfills/bswap<u32> (param $0 i32) (result i32)
   local.get $0
   i32.const -16711936
@@ -1523,17 +1512,6 @@
   i32.add
   i32.load8_u
  )
- (func $~lib/polyfills/bswap<u16> (param $0 i32) (result i32)
-  local.get $0
-  i32.const 8
-  i32.shl
-  local.get $0
-  i32.const 65535
-  i32.and
-  i32.const 8
-  i32.shr_u
-  i32.or
- )
  (func $~lib/dataview/DataView#getUint16 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $1
   i32.const 31
@@ -1558,15 +1536,18 @@
   i32.load offset=4
   i32.add
   i32.load16_u
-  local.set $0
-  local.get $2
-  i32.eqz
-  if
-   local.get $0
-   call $~lib/polyfills/bswap<u16>
-   local.set $0
-  end
+  local.tee $0
+  local.get $0
+  i32.const 8
+  i32.shl
   local.get $0
+  i32.const 65535
+  i32.and
+  i32.const 8
+  i32.shr_u
+  i32.or
+  local.get $2
+  select
  )
  (func $~lib/dataview/DataView#getUint32 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $1
@@ -1772,12 +1753,20 @@
   local.get $0
   i32.load offset=4
   local.get $2
-  if (result i32)
+  i32.eqz
+  if
    local.get $1
-  else
+   i32.const 8
+   i32.shl
    local.get $1
-   call $~lib/polyfills/bswap<u16>
+   i32.const 65535
+   i32.and
+   i32.const 8
+   i32.shr_u
+   i32.or
+   local.set $1
   end
+  local.get $1
   i32.store16
  )
  (func $~lib/dataview/DataView#setUint32 (param $0 i32) (param $1 i32) (param $2 i32)
@@ -1836,9 +1825,12 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   call $~lib/arraybuffer/ArrayBufferView#constructor
   local.tee $1
@@ -1876,7 +1868,10 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
   call $~lib/dataview/DataView#constructor
@@ -3384,20 +3379,30 @@
   end
   local.get $1
   i32.load
-  local.tee $3
+  local.tee $2
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.set $2
-  local.get $3
-  i32.const 0
+  local.set $3
   local.get $2
+  i32.const 0
+  local.get $3
   call $~lib/dataview/DataView#constructor
   local.set $2
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1520
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.load offset=4
   local.get $2
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1488
@@ -3419,9 +3424,23 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1520
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1520
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   call $start:std/dataview
diff --git a/tests/compiler/std/dataview.untouched.wat b/tests/compiler/std/dataview.untouched.wat
index e579146b4f..a535d138f8 100644
--- a/tests/compiler/std/dataview.untouched.wat
+++ b/tests/compiler/std/dataview.untouched.wat
@@ -42,6 +42,69 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -50,9 +113,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -65,7 +125,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -92,7 +152,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -146,7 +206,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -171,77 +231,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -258,6 +276,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -269,8 +293,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -278,7 +300,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -295,28 +317,18 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -327,44 +339,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -372,30 +374,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 144
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -414,22 +412,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -455,7 +453,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -467,18 +465,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 144
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -532,27 +530,15 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -567,24 +553,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -594,31 +566,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -626,8 +582,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -653,24 +607,22 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -678,7 +630,7 @@
    if
     i32.const 0
     i32.const 144
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -686,16 +638,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -711,7 +663,7 @@
    if
     i32.const 0
     i32.const 144
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -720,8 +672,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -732,49 +684,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -787,10 +735,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -840,73 +784,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
-    if
+    local.set $5
+    local.get $5
+    if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -919,11 +836,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -943,7 +860,7 @@
   if
    i32.const 192
    i32.const 144
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -969,9 +886,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1039,31 +953,24 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1076,79 +983,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 144
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1185,9 +1061,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1201,12 +1075,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1216,7 +1090,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1253,7 +1127,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1304,29 +1178,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1346,7 +1200,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1393,7 +1247,7 @@
      if
       i32.const 0
       i32.const 144
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1414,7 +1268,7 @@
     if
      i32.const 0
      i32.const 144
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1435,7 +1289,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1470,219 +1324,214 @@
   i32.const 16
   i32.add
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
    local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
    if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/rt/pure/increment (param $0 i32)
   (local $1 i32)
   local.get $0
diff --git a/tests/compiler/std/date.optimized.wat b/tests/compiler/std/date.optimized.wat
index fbe749fb7e..fc37c040b9 100644
--- a/tests/compiler/std/date.optimized.wat
+++ b/tests/compiler/std/date.optimized.wat
@@ -1,6 +1,7 @@
 (module
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_i32_i64_=>_i64 (func (param i32 i32 i32 i32 i64) (result i64)))
  (type $none_=>_f64 (func (result f64)))
  (type $i32_i32_i32_i32_i32_i32_f64_=>_f64 (func (param i32 i32 i32 i32 i32 i32 f64) (result f64)))
  (import "Date" "UTC" (func $~lib/bindings/Date/UTC (param i32 i32 i32 i32 i32 i32 f64) (result f64)))
@@ -12,6 +13,18 @@
  (global $std/date/date (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/date/Date.UTC (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i64) (result i64)
+  local.get $0
+  local.get $1
+  local.get $2
+  local.get $3
+  i32.const 0
+  i32.const 0
+  local.get $4
+  f64.convert_i64_s
+  call $~lib/bindings/Date/UTC
+  i64.trunc_f64_s
+ )
  (func $start:std/date
   (local $0 i32)
   (local $1 i32)
@@ -20,11 +33,8 @@
   i32.const 0
   i32.const 1
   i32.const 0
-  i32.const 0
-  i32.const 0
-  f64.const 0
-  call $~lib/bindings/Date/UTC
-  i64.trunc_f64_s
+  i64.const 0
+  call $~lib/date/Date.UTC
   i64.eqz
   i32.eqz
   if
@@ -39,11 +49,8 @@
   i32.const 0
   i32.const 1
   i32.const 0
-  i32.const 0
-  i32.const 0
-  f64.const 0
-  call $~lib/bindings/Date/UTC
-  i64.trunc_f64_s
+  i64.const 0
+  call $~lib/date/Date.UTC
   i64.eqz
   i32.eqz
   if
@@ -58,11 +65,8 @@
   i32.const 10
   i32.const 10
   i32.const 11
-  i32.const 0
-  i32.const 0
-  f64.const 1
-  call $~lib/bindings/Date/UTC
-  i64.trunc_f64_s
+  i64.const 1
+  call $~lib/date/Date.UTC
   global.set $std/date/creationTime
   global.get $std/date/creationTime
   i64.const 1541847600001
diff --git a/tests/compiler/std/date.untouched.wat b/tests/compiler/std/date.untouched.wat
index 1455f2e847..563ac7474e 100644
--- a/tests/compiler/std/date.untouched.wat
+++ b/tests/compiler/std/date.untouched.wat
@@ -5,7 +5,9 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i64_=>_i32 (func (param i32 i64) (result i32)))
+ (type $none_=>_i64 (func (result i64)))
  (type $i32_=>_i64 (func (param i32) (result i64)))
+ (type $i32_i32_i32_i32_i32_i32_i64_=>_i64 (func (param i32 i32 i32 i32 i32 i32 i64) (result i64)))
  (type $i32_i64_=>_i64 (func (param i32 i64) (result i64)))
  (type $none_=>_f64 (func (result f64)))
  (type $i32_i32_i32_i32_i32_i32_f64_=>_f64 (func (param i32 i32 i32 i32 i32 i32 f64) (result f64)))
@@ -22,6 +24,22 @@
  (global $~lib/heap/__heap_base i32 (i32.const 56))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/date/Date.UTC (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (param $5 i32) (param $6 i64) (result i64)
+  local.get $0
+  local.get $1
+  local.get $2
+  local.get $3
+  local.get $4
+  local.get $5
+  local.get $6
+  f64.convert_i64_s
+  call $~lib/bindings/Date/UTC
+  i64.trunc_f64_s
+ )
+ (func $~lib/date/Date.now (result i64)
+  call $~lib/bindings/Date/now
+  i64.trunc_f64_s
+ )
  (func $~lib/rt/stub/maybeGrowMemory (param $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -163,37 +181,14 @@
   local.get $1
  )
  (func $start:std/date
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i64)
   i32.const 1970
-  local.set $2
   i32.const 0
-  local.set $1
   i32.const 1
-  local.set $0
   i32.const 0
-  local.set $3
   i32.const 0
-  local.set $4
   i32.const 0
-  local.set $5
   i64.const 0
-  local.set $6
-  local.get $2
-  local.get $1
-  local.get $0
-  local.get $3
-  local.get $4
-  local.get $5
-  local.get $6
-  f64.convert_i64_s
-  call $~lib/bindings/Date/UTC
-  i64.trunc_f64_s
+  call $~lib/date/Date.UTC
   i64.const 0
   i64.eq
   i32.eqz
@@ -206,29 +201,13 @@
    unreachable
   end
   i32.const 1970
-  local.set $5
   i32.const 0
-  local.set $4
   i32.const 1
-  local.set $3
   i32.const 0
-  local.set $2
   i32.const 0
-  local.set $1
   i32.const 0
-  local.set $0
   i64.const 0
-  local.set $6
-  local.get $5
-  local.get $4
-  local.get $3
-  local.get $2
-  local.get $1
-  local.get $0
-  local.get $6
-  f64.convert_i64_s
-  call $~lib/bindings/Date/UTC
-  i64.trunc_f64_s
+  call $~lib/date/Date.UTC
   i64.const 0
   i64.eq
   i32.eqz
@@ -241,29 +220,13 @@
    unreachable
   end
   i32.const 2018
-  local.set $5
   i32.const 10
-  local.set $4
   i32.const 10
-  local.set $3
   i32.const 11
-  local.set $2
   i32.const 0
-  local.set $1
   i32.const 0
-  local.set $0
   i64.const 1
-  local.set $6
-  local.get $5
-  local.get $4
-  local.get $3
-  local.get $2
-  local.get $1
-  local.get $0
-  local.get $6
-  f64.convert_i64_s
-  call $~lib/bindings/Date/UTC
-  i64.trunc_f64_s
+  call $~lib/date/Date.UTC
   global.set $std/date/creationTime
   global.get $std/date/creationTime
   i64.const 1541847600001
@@ -277,8 +240,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $~lib/bindings/Date/now
-  i64.trunc_f64_s
+  call $~lib/date/Date.now
   global.get $std/date/creationTime
   i64.gt_s
   i32.eqz
diff --git a/tests/compiler/std/hash.optimized.wat b/tests/compiler/std/hash.optimized.wat
index fa88fcc653..8bc6279039 100644
--- a/tests/compiler/std/hash.optimized.wat
+++ b/tests/compiler/std/hash.optimized.wat
@@ -8,7 +8,7 @@
  (data (i32.const 1104) "\06\00\00\00\01\00\00\00\01\00\00\00\06\00\00\00a\00b\00c")
  (export "memory" (memory $0))
  (start $~start)
- (func $~lib/util/hash/hashStr (param $0 i32)
+ (func $~lib/util/hash/HASH<~lib/string/String | null> (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -50,14 +50,14 @@
  )
  (func $~start
   i32.const 0
-  call $~lib/util/hash/hashStr
+  call $~lib/util/hash/HASH<~lib/string/String | null>
   i32.const 1040
-  call $~lib/util/hash/hashStr
+  call $~lib/util/hash/HASH<~lib/string/String | null>
   i32.const 1056
-  call $~lib/util/hash/hashStr
+  call $~lib/util/hash/HASH<~lib/string/String | null>
   i32.const 1088
-  call $~lib/util/hash/hashStr
+  call $~lib/util/hash/HASH<~lib/string/String | null>
   i32.const 1120
-  call $~lib/util/hash/hashStr
+  call $~lib/util/hash/HASH<~lib/string/String | null>
  )
 )
diff --git a/tests/compiler/std/hash.untouched.wat b/tests/compiler/std/hash.untouched.wat
index 542717b87e..3dd078bb7d 100644
--- a/tests/compiler/std/hash.untouched.wat
+++ b/tests/compiler/std/hash.untouched.wat
@@ -3,6 +3,8 @@
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $f32_=>_i32 (func (param f32) (result i32)))
+ (type $f64_=>_i32 (func (param f64) (result i32)))
  (memory $0 1)
  (data (i32.const 16) "\00\00\00\00\01\00\00\00\01\00\00\00\00\00\00\00")
  (data (i32.const 32) "\02\00\00\00\01\00\00\00\01\00\00\00\02\00\00\00a\00")
@@ -76,9 +78,39 @@
   call $~lib/rt/stub/__release
   local.get $3
  )
+ (func $~lib/util/hash/HASH<~lib/string/String | null> (param $0 i32) (result i32)
+  (local $1 i32)
+  local.get $0
+  call $~lib/rt/stub/__retain
+  local.set $0
+  i32.const 1
+  drop
+  local.get $0
+  call $~lib/util/hash/hashStr
+  local.set $1
+  local.get $0
+  call $~lib/rt/stub/__release
+  local.get $1
+  return
+ )
  (func $std/hash/check (param $0 i32) (result i32)
   i32.const 1
  )
+ (func $~lib/util/hash/HASH<~lib/string/String> (param $0 i32) (result i32)
+  (local $1 i32)
+  local.get $0
+  call $~lib/rt/stub/__retain
+  local.set $0
+  i32.const 1
+  drop
+  local.get $0
+  call $~lib/util/hash/hashStr
+  local.set $1
+  local.get $0
+  call $~lib/rt/stub/__release
+  local.get $1
+  return
+ )
  (func $~lib/util/hash/hash32 (param $0 i32) (result i32)
   (local $1 i32)
   i32.const -2128831035
@@ -121,6 +153,22 @@
   local.set $1
   local.get $1
  )
+ (func $~lib/util/hash/HASH<f32> (param $0 f32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  i32.reinterpret_f32
+  call $~lib/util/hash/hash32
+  return
+ )
  (func $~lib/util/hash/hash64 (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -209,349 +257,93 @@
   local.set $3
   local.get $3
  )
+ (func $~lib/util/hash/HASH<f64> (param $0 f64) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 8
+  i32.eq
+  drop
+  local.get $0
+  i64.reinterpret_f64
+  call $~lib/util/hash/hash64
+  return
+ )
  (func $start:std/hash
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 f32)
-  (local $3 f64)
-  block $~lib/util/hash/HASH<~lib/string/String | null>|inlined.0 (result i32)
-   i32.const 0
-   call $~lib/rt/stub/__retain
-   local.set $0
-   i32.const 1
-   drop
-   local.get $0
-   call $~lib/util/hash/hashStr
-   local.set $1
-   local.get $0
-   call $~lib/rt/stub/__release
-   local.get $1
-   br $~lib/util/hash/HASH<~lib/string/String | null>|inlined.0
-  end
+  i32.const 0
+  call $~lib/util/hash/HASH<~lib/string/String | null>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<~lib/string/String>|inlined.0 (result i32)
-   i32.const 32
-   local.set $1
-   i32.const 1
-   drop
-   local.get $1
-   call $~lib/util/hash/hashStr
-   local.set $0
-   local.get $1
-   call $~lib/rt/stub/__release
-   local.get $0
-   br $~lib/util/hash/HASH<~lib/string/String>|inlined.0
-  end
+  i32.const 32
+  call $~lib/util/hash/HASH<~lib/string/String>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<~lib/string/String>|inlined.1 (result i32)
-   i32.const 48
-   local.set $0
-   i32.const 1
-   drop
-   local.get $0
-   call $~lib/util/hash/hashStr
-   local.set $1
-   local.get $0
-   call $~lib/rt/stub/__release
-   local.get $1
-   br $~lib/util/hash/HASH<~lib/string/String>|inlined.1
-  end
+  i32.const 48
+  call $~lib/util/hash/HASH<~lib/string/String>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<~lib/string/String>|inlined.2 (result i32)
-   i32.const 80
-   local.set $1
-   i32.const 1
-   drop
-   local.get $1
-   call $~lib/util/hash/hashStr
-   local.set $0
-   local.get $1
-   call $~lib/rt/stub/__release
-   local.get $0
-   br $~lib/util/hash/HASH<~lib/string/String>|inlined.2
-  end
+  i32.const 80
+  call $~lib/util/hash/HASH<~lib/string/String>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<~lib/string/String>|inlined.3 (result i32)
-   i32.const 112
-   local.set $0
-   i32.const 1
-   drop
-   local.get $0
-   call $~lib/util/hash/hashStr
-   local.set $1
-   local.get $0
-   call $~lib/rt/stub/__release
-   local.get $1
-   br $~lib/util/hash/HASH<~lib/string/String>|inlined.3
-  end
+  i32.const 112
+  call $~lib/util/hash/HASH<~lib/string/String>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f32>|inlined.0 (result i32)
-   f32.const 0
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.0
-  end
+  f32.const 0
+  call $~lib/util/hash/HASH<f32>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f32>|inlined.1 (result i32)
-   f32.const 1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.1
-  end
+  f32.const 1
+  call $~lib/util/hash/HASH<f32>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f32>|inlined.2 (result i32)
-   f32.const 1.100000023841858
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.2
-  end
+  f32.const 1.100000023841858
+  call $~lib/util/hash/HASH<f32>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f32>|inlined.3 (result i32)
-   f32.const 0
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.3
-  end
+  f32.const 0
+  call $~lib/util/hash/HASH<f32>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f32>|inlined.4 (result i32)
-   f32.const inf
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.4
-  end
+  f32.const inf
+  call $~lib/util/hash/HASH<f32>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f32>|inlined.5 (result i32)
-   f32.const nan:0x400000
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.5
-  end
+  f32.const nan:0x400000
+  call $~lib/util/hash/HASH<f32>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f64>|inlined.0 (result i32)
-   f64.const 0
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.0
-  end
+  f64.const 0
+  call $~lib/util/hash/HASH<f64>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f64>|inlined.1 (result i32)
-   f64.const 1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.1
-  end
+  f64.const 1
+  call $~lib/util/hash/HASH<f64>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f64>|inlined.2 (result i32)
-   f64.const 1.1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.2
-  end
+  f64.const 1.1
+  call $~lib/util/hash/HASH<f64>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f64>|inlined.3 (result i32)
-   f64.const 0
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.3
-  end
+  f64.const 0
+  call $~lib/util/hash/HASH<f64>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f64>|inlined.4 (result i32)
-   f64.const inf
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.4
-  end
+  f64.const inf
+  call $~lib/util/hash/HASH<f64>
   call $std/hash/check
   drop
-  block $~lib/util/hash/HASH<f64>|inlined.5 (result i32)
-   f64.const nan:0x8000000000000
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.5
-  end
+  f64.const nan:0x8000000000000
+  call $~lib/util/hash/HASH<f64>
   call $std/hash/check
   drop
  )
diff --git a/tests/compiler/std/map.optimized.wat b/tests/compiler/std/map.optimized.wat
index 45fa556b7b..bc4b7c5ffa 100644
--- a/tests/compiler/std/map.optimized.wat
+++ b/tests/compiler/std/map.optimized.wat
@@ -2,24 +2,24 @@
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
- (type $i32_i64_=>_i32 (func (param i32 i64) (result i32)))
  (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32)))
- (type $i32_f32_=>_i32 (func (param i32 f32) (result i32)))
  (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
- (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_i64_=>_none (func (param i32 i32 i64)))
  (type $i32_i64_=>_none (func (param i32 i64)))
  (type $i32_f32_=>_none (func (param i32 f32)))
  (type $i32_f64_=>_none (func (param i32 f64)))
+ (type $i32_i64_=>_i32 (func (param i32 i64) (result i32)))
  (type $i32_i64_i64_=>_i32 (func (param i32 i64 i64) (result i32)))
+ (type $i32_f32_=>_i32 (func (param i32 f32) (result i32)))
  (type $i32_f32_f32_=>_i32 (func (param i32 f32 f32) (result i32)))
+ (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $i32_f64_f64_=>_i32 (func (param i32 f64 f64) (result i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
@@ -44,6 +44,31 @@
  (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -58,7 +83,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -80,7 +105,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -99,23 +124,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -123,61 +148,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -185,9 +202,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -196,7 +211,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -219,7 +234,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -233,7 +248,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -246,9 +261,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -257,7 +272,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -266,7 +281,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -284,9 +299,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -306,7 +321,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -339,8 +354,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -361,27 +376,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -410,13 +425,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -424,21 +439,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -453,31 +462,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -507,7 +513,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -524,7 +530,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -552,7 +558,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -604,7 +610,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -625,7 +631,8 @@
     unreachable
    end
    i32.const 1568
-   local.tee $0
+   local.set $2
+   i32.const 1568
    i32.const 0
    i32.store
    i32.const 3136
@@ -644,27 +651,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1568
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -684,7 +685,7 @@
    i32.const 1568
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -693,7 +694,7 @@
   if
    i32.const 1088
    i32.const 1040
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -712,6 +713,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -721,23 +723,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -766,7 +767,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -784,16 +785,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -814,26 +809,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -851,7 +842,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -896,13 +887,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -922,7 +914,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1013,7 +1005,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1029,7 +1021,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1054,14 +1046,6 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -1113,161 +1097,171 @@
   end
   local.get $0
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
   (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -1284,34 +1278,35 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
   local.get $0
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $1
   call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/pure/__release (param $0 i32)
+ (func $~lib/map/Map<i8,i32>#clear (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 16
+  call $~lib/arraybuffer/ArrayBuffer#constructor
+  local.set $1
   local.get $0
+  i32.load
+  local.tee $2
   i32.const 1556
   i32.gt_u
   if
-   local.get $0
+   local.get $2
    i32.const 16
    i32.sub
    call $~lib/rt/pure/decrement
   end
- )
- (func $~lib/map/Map<i8,i32>#clear (param $0 i32)
-  (local $1 i32)
-  i32.const 16
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
-  local.get $0
-  i32.load
-  call $~lib/rt/pure/__release
   local.get $0
   local.get $1
   i32.store
@@ -1323,7 +1318,15 @@
   local.set $1
   local.get $0
   i32.load offset=8
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store offset=8
@@ -1337,13 +1340,6 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/util/hash/hash8 (param $0 i32) (result i32)
-  local.get $0
-  i32.const -2128831035
-  i32.xor
-  i32.const 16777619
-  i32.mul
- )
  (func $~lib/map/Map<i8,i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   i32.load
@@ -1387,19 +1383,6 @@
   end
   i32.const 0
  )
- (func $~lib/map/Map<i8,i32>#has (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i32.const 24
-  i32.shl
-  i32.const 24
-  i32.shr_s
-  call $~lib/util/hash/hash8
-  call $~lib/map/Map<i8,i32>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/map/Map<i8,i32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -1411,143 +1394,175 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 12
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 12
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load8_s
      i32.store8
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=4
      i32.store offset=4
+     local.get $4
+     local.get $3
+     local.get $1
      local.get $5
-     local.get $6
-     local.get $2
      i32.load8_s
-     call $~lib/util/hash/hash8
-     local.get $1
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      i32.and
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 12
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 12
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
-  local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.tee $1
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i8,i32>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 24
   i32.shl
   i32.const 24
   i32.shr_s
-  call $~lib/util/hash/hash8
-  local.tee $4
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $3
+  local.set $4
+  local.get $0
+  local.get $1
+  local.get $3
   call $~lib/map/Map<i8,i32>#find
   local.tee $3
   if
@@ -1637,14 +1652,17 @@
   i32.shl
   i32.const 24
   i32.shr_s
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/map/Map<i8,i32>#find
   local.tee $0
   i32.eqz
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -1652,177 +1670,258 @@
   local.get $0
   i32.load offset=4
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<i8>#constructor (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  i32.const 1073741808
+  i32.gt_u
+  if
+   i32.const 1200
+   i32.const 1472
+   i32.const 57
+   i32.const 60
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $0
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 16
+  i32.const 4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  i32.const 0
+  i32.store
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  i32.const 0
+  i32.store offset=8
+  local.get $3
+  i32.const 0
+  i32.store offset=12
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
+  i32.load
+  local.tee $4
+  i32.ne
+  if
    local.get $2
-   local.set $4
-   local.get $0
+   call $~lib/rt/pure/__retain
+   local.set $2
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $3
+  local.get $2
+  i32.store
+  local.get $3
+  local.get $1
+  i32.store offset=4
+  local.get $3
+  local.get $0
+  i32.store offset=8
+  local.get $3
+  local.get $0
+  i32.store offset=12
+  local.get $3
+ )
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
-     end
-     loop $while-continue|1
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $3
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $3
       local.get $4
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
+     end
+    end
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
       i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
-      end
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|2
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
       local.get $0
-      local.tee $2
+      local.get $2
       i32.const 1
+      i32.sub
+      local.tee $2
       i32.add
-      local.set $0
       local.get $1
-      local.tee $3
-      i32.const 1
-      i32.add
-      local.set $1
       local.get $2
-      local.get $3
+      i32.add
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|3
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
-      i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.get $2
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
-     end
-    end
-    loop $while-continue|5
-     local.get $4
-     if
-      local.get $4
-      i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
@@ -1871,7 +1970,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -1894,10 +1995,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -1927,7 +2028,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 1556
   i32.ge_u
@@ -2004,7 +2105,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 581
+    i32.const 573
     i32.const 3
     call $~lib/builtins/abort
     unreachable
@@ -2023,7 +2124,7 @@
    local.get $2
    local.get $5
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
    local.get $1
    local.get $3
    i32.ne
@@ -2043,162 +2144,50 @@
  (func $~lib/array/Array<i8>#__set (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $1
-  local.get $0
-  i32.load offset=12
-  i32.ge_u
-  if
-   local.get $1
-   i32.const 0
-   i32.lt_s
-   if
-    i32.const 1520
-    i32.const 1472
-    i32.const 120
-    i32.const 22
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   local.get $1
-   i32.const 1
-   i32.add
-   local.tee $3
-   i32.const 0
-   call $~lib/array/ensureSize
-   local.get $0
-   local.get $3
-   i32.store offset=12
-  end
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.add
-  local.get $2
-  i32.store8
- )
- (func $~lib/array/Array<i8>#set:length (param $0 i32) (param $1 i32)
-  local.get $0
-  i32.load offset=12
-  drop
-  local.get $0
-  local.get $1
-  i32.const 0
-  call $~lib/array/ensureSize
-  local.get $0
-  local.get $1
-  i32.store offset=12
- )
- (func $~lib/map/Map<i8,i32>#keys (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
-  local.get $0
-  i32.load offset=16
-  local.tee $4
-  local.tee $8
-  i32.const 1073741808
-  i32.gt_u
-  if
-   i32.const 1200
-   i32.const 1472
-   i32.const 57
-   i32.const 60
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $8
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $8
-  call $~lib/memory/memory.fill
-  i32.const 16
-  i32.const 4
-  call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/pure/__retain
-  local.tee $0
-  i32.const 0
-  i32.store
-  local.get $0
-  i32.const 0
-  i32.store offset=4
-  local.get $0
-  i32.const 0
-  i32.store offset=8
-  local.get $0
-  i32.const 0
-  i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
-  i32.load
-  local.tee $3
-  i32.ne
-  if
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
-  end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=4
-  local.get $0
-  local.get $8
-  i32.store offset=8
-  local.get $0
-  local.get $8
-  i32.store offset=12
-  loop $for-loop|0
-   local.get $6
-   local.get $4
-   i32.lt_s
-   if
-    local.get $5
-    local.get $6
-    i32.const 12
-    i32.mul
-    i32.add
-    local.tee $2
-    i32.load offset=8
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $7
-     local.get $2
-     i32.load8_s
-     call $~lib/array/Array<i8>#__set
-     local.get $7
-     i32.const 1
-     i32.add
-     local.set $7
-    end
-    local.get $6
-    i32.const 1
-    i32.add
-    local.set $6
-    br $for-loop|0
+  local.get $0
+  i32.load offset=12
+  i32.ge_u
+  if
+   local.get $1
+   i32.const 0
+   i32.lt_s
+   if
+    i32.const 1520
+    i32.const 1472
+    i32.const 120
+    i32.const 22
+    call $~lib/builtins/abort
+    unreachable
    end
+   local.get $0
+   local.get $1
+   i32.const 1
+   i32.add
+   local.tee $3
+   i32.const 0
+   call $~lib/array/ensureSize
+   local.get $0
+   local.get $3
+   i32.store offset=12
   end
   local.get $0
-  local.get $7
-  call $~lib/array/Array<i8>#set:length
+  i32.load offset=4
+  local.get $1
+  i32.add
+  local.get $2
+  i32.store8
+ )
+ (func $~lib/array/Array<i8>#set:length (param $0 i32) (param $1 i32)
+  local.get $0
+  i32.load offset=12
+  drop
+  local.get $0
+  local.get $1
+  i32.const 0
+  call $~lib/array/ensureSize
   local.get $0
+  local.get $1
+  i32.store offset=12
  )
  (func $~lib/array/Array<i32>#constructor (param $0 i32) (result i32)
   (local $1 i32)
@@ -2217,18 +2206,24 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   i32.const 2
   i32.shl
   local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
   local.get $4
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
@@ -2254,7 +2249,14 @@
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $3
   local.get $2
@@ -2374,12 +2376,21 @@
  )
  (func $~lib/map/Map<i8,i8>#clear (param $0 i32)
   (local $1 i32)
+  (local $2 i32)
   i32.const 16
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $1
   local.get $0
   i32.load
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store
@@ -2391,7 +2402,15 @@
   local.set $1
   local.get $0
   i32.load offset=8
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store offset=8
@@ -2407,9 +2426,12 @@
  )
  (func $~lib/map/Map<i32,i32>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -2465,129 +2487,156 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load8_s
      i32.store8
+     local.get $4
      local.get $5
-     local.get $2
      i32.load8_s offset=1
      i32.store8 offset=1
+     local.get $4
+     local.get $3
+     local.get $1
      local.get $5
-     local.get $6
-     local.get $2
      i32.load8_s
-     call $~lib/util/hash/hash8
-     local.get $1
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      i32.and
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 8
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 8
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
-  local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.tee $1
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i8,i8>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -2599,11 +2648,15 @@
   i32.shl
   i32.const 24
   i32.shr_s
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $1
   local.set $4
   local.get $0
   i32.load
-  local.get $4
+  local.get $1
   local.get $0
   i32.load offset=4
   i32.and
@@ -2805,55 +2858,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 12
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 12
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load
      i32.store
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=4
      i32.store offset=4
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      i32.load
      call $~lib/util/hash/hash32
      local.get $1
@@ -2861,73 +2913,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 12
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 12
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i32,i32>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -3028,7 +3106,10 @@
   i32.shl
   i32.const 24
   i32.shr_s
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/map/Map<i8,i32>#find
   local.tee $1
   i32.eqz
@@ -3091,9 +3172,14 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -3126,7 +3212,16 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<i8,i32>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -3145,10 +3240,27 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i8,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<i8,i32>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -3209,7 +3321,16 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<i8,i32>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -3248,10 +3369,27 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<i8,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<i8,i32>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -3299,46 +3437,92 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
   local.get $0
-  call $~lib/map/Map<i8,i32>#keys
+  i32.load offset=8
   local.set $4
   local.get $0
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<i8>#constructor
+  local.set $1
+  loop $for-loop|0
+   local.get $5
+   local.get $6
+   i32.lt_s
+   if
+    local.get $4
+    local.get $5
+    i32.const 12
+    i32.mul
+    i32.add
+    local.tee $7
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $1
+     local.get $3
+     local.get $7
+     i32.load8_s
+     call $~lib/array/Array<i8>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $5
+    i32.const 1
+    i32.add
+    local.set $5
+    br $for-loop|0
+   end
+  end
+  local.get $1
+  local.get $3
+  call $~lib/array/Array<i8>#set:length
+  local.get $0
   call $~lib/map/Map<i8,i32>#values
   local.set $6
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $1
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=16
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=20
-  local.get $1
+  local.get $3
   call $~lib/map/Map<i8,i8>#clear
   call $~lib/map/Map<i32,i32>#constructor
   local.set $5
   loop $for-loop|4
    local.get $2
-   local.get $4
+   local.get $1
    i32.load offset=12
    i32.lt_s
    if
     local.get $2
-    local.get $4
+    local.get $1
     i32.load offset=12
     i32.ge_u
     if
@@ -3350,18 +3534,27 @@
      unreachable
     end
     local.get $2
-    local.get $4
+    local.get $1
     i32.load offset=4
     i32.add
     i32.load8_s
-    local.set $3
+    local.set $4
     local.get $6
     local.get $2
     call $~lib/array/Array<i32>#__get
     local.set $7
     local.get $0
-    local.get $3
-    call $~lib/map/Map<i8,i32>#has
+    local.get $4
+    local.get $4
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -3371,11 +3564,23 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $7
     i32.const 20
     i32.sub
-    call $~lib/map/Map<i8,i32>#has
+    local.tee $8
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    local.set $9
+    local.get $0
+    local.get $8
+    local.get $9
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -3385,19 +3590,35 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    local.get $3
     local.get $3
+    local.get $4
+    local.get $4
     call $~lib/map/Map<i8,i8>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $5
     local.get $7
     i32.const 20
     i32.sub
-    local.tee $3
-    local.get $3
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $2
     i32.const 1
     i32.add
@@ -3405,7 +3626,7 @@
     br $for-loop|4
    end
   end
-  local.get $1
+  local.get $3
   i32.load offset=20
   i32.const 100
   i32.ne
@@ -3442,7 +3663,16 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<i8,i32>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -3476,7 +3706,16 @@
     call $~lib/map/Map<i8,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<i8,i32>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -3517,7 +3756,16 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<i8,i32>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -3533,13 +3781,30 @@
     i32.shl
     i32.const 24
     i32.shr_s
-    i32.const 10
-    i32.add
-    call $~lib/map/Map<i8,i32>#set
-    call $~lib/rt/pure/__release
-    local.get $0
-    local.get $2
-    call $~lib/map/Map<i8,i32>#has
+    i32.const 10
+    i32.add
+    call $~lib/map/Map<i8,i32>#set
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $0
+    local.get $2
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -3554,7 +3819,16 @@
     call $~lib/map/Map<i8,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<i8,i32>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -3594,27 +3868,51 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
- )
- (func $~lib/map/Map<u8,i32>#has (param $0 i32) (param $1 i32) (result i32)
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  local.get $1
-  local.get $1
-  i32.const 255
-  i32.and
-  call $~lib/util/hash/hash8
-  call $~lib/map/Map<i8,i32>#find
-  i32.const 0
-  i32.ne
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<u8,i32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -3627,141 +3925,173 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 12
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 12
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load8_u
      i32.store8
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=4
      i32.store offset=4
+     local.get $4
+     local.get $3
+     local.get $1
      local.get $5
-     local.get $6
-     local.get $2
      i32.load8_u
-     call $~lib/util/hash/hash8
-     local.get $1
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      i32.and
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 12
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 12
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
-  local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.tee $1
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<u8,i32>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 255
   i32.and
-  call $~lib/util/hash/hash8
-  local.tee $4
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $3
+  local.set $4
+  local.get $0
+  local.get $1
+  local.get $3
   call $~lib/map/Map<i8,i32>#find
   local.tee $3
   if
@@ -3849,14 +4179,17 @@
   local.get $1
   i32.const 255
   i32.and
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/map/Map<i8,i32>#find
   local.tee $0
   i32.eqz
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -3864,22 +4197,12 @@
   local.get $0
   i32.load offset=4
  )
- (func $~lib/map/Map<u8,i32>#keys (param $0 i32) (result i32)
+ (func $~lib/array/Array<u8>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
   local.get $0
-  i32.load offset=16
-  local.tee $4
-  local.tee $8
   i32.const 1073741808
   i32.gt_u
   if
@@ -3890,91 +4213,68 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $8
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $8
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $0
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 9
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $4
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
+  local.get $3
   local.get $0
-  local.get $8
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $8
   i32.store offset=12
-  loop $for-loop|0
-   local.get $6
-   local.get $4
-   i32.lt_s
-   if
-    local.get $5
-    local.get $6
-    i32.const 12
-    i32.mul
-    i32.add
-    local.tee $2
-    i32.load offset=8
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $7
-     local.get $2
-     i32.load8_u
-     call $~lib/array/Array<i8>#__set
-     local.get $7
-     i32.const 1
-     i32.add
-     local.set $7
-    end
-    local.get $6
-    i32.const 1
-    i32.add
-    local.set $6
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $7
-  call $~lib/array/Array<i8>#set:length
-  local.get $0
+  local.get $3
  )
  (func $~lib/map/Map<u8,u8>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -3987,129 +4287,156 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load8_u
      i32.store8
+     local.get $4
      local.get $5
-     local.get $2
      i32.load8_u offset=1
      i32.store8 offset=1
+     local.get $4
+     local.get $3
+     local.get $1
      local.get $5
-     local.get $6
-     local.get $2
      i32.load8_u
-     call $~lib/util/hash/hash8
-     local.get $1
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      i32.and
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 8
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 8
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
-  local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.tee $1
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<u8,u8>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -4119,11 +4446,15 @@
   local.tee $3
   i32.const 255
   i32.and
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $1
   local.set $4
   local.get $0
   i32.load
-  local.get $4
+  local.get $1
   local.get $0
   i32.load offset=4
   i32.and
@@ -4249,7 +4580,10 @@
   local.get $1
   i32.const 255
   i32.and
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/map/Map<i8,i32>#find
   local.tee $1
   i32.eqz
@@ -4312,9 +4646,14 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 8
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -4345,7 +4684,14 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<u8,i32>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -4362,10 +4708,25 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<u8,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<u8,i32>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -4422,7 +4783,14 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<u8,i32>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -4457,10 +4825,25 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<u8,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<u8,i32>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -4506,46 +4889,92 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/map/Map<u8,i32>#keys
-  local.set $4
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $4
+  local.get $0
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<u8>#constructor
+  local.set $1
+  loop $for-loop|0
+   local.get $5
+   local.get $6
+   i32.lt_s
+   if
+    local.get $4
+    local.get $5
+    i32.const 12
+    i32.mul
+    i32.add
+    local.tee $7
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $1
+     local.get $3
+     local.get $7
+     i32.load8_u
+     call $~lib/array/Array<i8>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $5
+    i32.const 1
+    i32.add
+    local.set $5
+    br $for-loop|0
+   end
+  end
+  local.get $1
+  local.get $3
+  call $~lib/array/Array<i8>#set:length
   local.get $0
   call $~lib/map/Map<i8,i32>#values
   local.set $6
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 10
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $1
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=16
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=20
-  local.get $1
+  local.get $3
   call $~lib/map/Map<i8,i8>#clear
   call $~lib/map/Map<i32,i32>#constructor
   local.set $5
   loop $for-loop|4
    local.get $2
-   local.get $4
+   local.get $1
    i32.load offset=12
    i32.lt_s
    if
     local.get $2
-    local.get $4
+    local.get $1
     i32.load offset=12
     i32.ge_u
     if
@@ -4557,18 +4986,25 @@
      unreachable
     end
     local.get $2
-    local.get $4
+    local.get $1
     i32.load offset=4
     i32.add
     i32.load8_u
-    local.set $3
+    local.set $4
     local.get $6
     local.get $2
     call $~lib/array/Array<i32>#__get
     local.set $7
     local.get $0
-    local.get $3
-    call $~lib/map/Map<u8,i32>#has
+    local.get $4
+    local.get $4
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -4578,11 +5014,21 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $0
     local.get $7
     i32.const 20
     i32.sub
-    call $~lib/map/Map<u8,i32>#has
+    local.tee $8
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    local.set $9
+    local.get $0
+    local.get $8
+    local.get $9
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -4592,19 +5038,35 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    local.get $3
     local.get $3
+    local.get $4
+    local.get $4
     call $~lib/map/Map<u8,u8>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $5
     local.get $7
     i32.const 20
     i32.sub
-    local.tee $3
-    local.get $3
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $2
     i32.const 1
     i32.add
@@ -4612,7 +5074,7 @@
     br $for-loop|4
    end
   end
-  local.get $1
+  local.get $3
   i32.load offset=20
   i32.const 100
   i32.ne
@@ -4647,7 +5109,14 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<u8,i32>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -4679,7 +5148,14 @@
     call $~lib/map/Map<u8,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<u8,i32>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -4718,7 +5194,14 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<u8,i32>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -4735,10 +5218,25 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<u8,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/map/Map<u8,i32>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -4753,7 +5251,14 @@
     call $~lib/map/Map<u8,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<u8,i32>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/map/Map<i8,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -4793,16 +5298,51 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/hash/hash16 (param $0 i32) (result i32)
   local.get $0
@@ -4886,55 +5426,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 12
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 12
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load16_s
      i32.store16
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=4
      i32.store offset=4
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      i32.load16_s
      call $~lib/util/hash/hash16
      local.get $1
@@ -4942,87 +5481,115 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 12
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 12
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i16,i32>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 16
   i32.shl
   i32.const 16
   i32.shr_s
   call $~lib/util/hash/hash16
-  local.tee $4
+  local.tee $3
+  local.set $4
+  local.get $0
+  local.get $1
+  local.get $3
   call $~lib/map/Map<i16,i32>#find
   local.tee $3
   if
@@ -5119,7 +5686,7 @@
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -5127,6 +5694,89 @@
   local.get $0
   i32.load offset=4
  )
+ (func $~lib/array/Array<i16>#constructor (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.const 536870904
+  i32.gt_u
+  if
+   i32.const 1200
+   i32.const 1472
+   i32.const 57
+   i32.const 60
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
+  i32.const 1
+  i32.shl
+  local.tee $4
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 16
+  i32.const 12
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  i32.const 0
+  i32.store
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  i32.const 0
+  i32.store offset=8
+  local.get $3
+  i32.const 0
+  i32.store offset=12
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
+  i32.load
+  local.tee $5
+  i32.ne
+  if
+   local.get $2
+   call $~lib/rt/pure/__retain
+   local.set $2
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $3
+  local.get $2
+  i32.store
+  local.get $3
+  local.get $1
+  i32.store offset=4
+  local.get $3
+  local.get $4
+  i32.store offset=8
+  local.get $3
+  local.get $0
+  i32.store offset=12
+  local.get $3
+ )
  (func $~lib/array/Array<i16>#__set (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   local.get $1
@@ -5177,123 +5827,6 @@
   local.get $1
   i32.store offset=12
  )
- (func $~lib/map/Map<i16,i32>#keys (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
-  local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
-  i32.const 536870904
-  i32.gt_u
-  if
-   i32.const 1200
-   i32.const 1472
-   i32.const 57
-   i32.const 60
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $6
-  i32.const 1
-  i32.shl
-  local.tee $5
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
-  i32.const 16
-  i32.const 12
-  call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/pure/__retain
-  local.tee $0
-  i32.const 0
-  i32.store
-  local.get $0
-  i32.const 0
-  i32.store offset=4
-  local.get $0
-  i32.const 0
-  i32.store offset=8
-  local.get $0
-  i32.const 0
-  i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
-  i32.load
-  local.tee $3
-  i32.ne
-  if
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
-  end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=4
-  local.get $0
-  local.get $5
-  i32.store offset=8
-  local.get $0
-  local.get $6
-  i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 12
-    i32.mul
-    i32.add
-    local.tee $2
-    i32.load offset=8
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i32.load16_s
-     call $~lib/array/Array<i16>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i16>#set:length
-  local.get $0
- )
  (func $~lib/map/Map<i16,i16>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -5305,55 +5838,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load16_s
      i32.store16
+     local.get $4
      local.get $5
-     local.get $2
      i32.load16_s offset=2
      i32.store16 offset=2
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      i32.load16_s
      call $~lib/util/hash/hash16
      local.get $1
@@ -5361,73 +5893,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 8
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 8
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i16,i16>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -5634,9 +6192,12 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 11
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -5688,7 +6249,15 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i16,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
     call $~lib/map/Map<i16,i32>#has
@@ -5791,7 +6360,15 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<i16,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
     call $~lib/map/Map<i16,i32>#has
@@ -5842,15 +6419,61 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
   local.get $0
-  call $~lib/map/Map<i16,i32>#keys
-  local.set $4
+  i32.load offset=8
+  local.set $6
+  local.get $0
+  i32.load offset=16
+  local.tee $4
+  call $~lib/array/Array<i16>#constructor
+  local.set $1
+  loop $for-loop|0
+   local.get $5
+   local.get $4
+   i32.lt_s
+   if
+    local.get $6
+    local.get $5
+    i32.const 12
+    i32.mul
+    i32.add
+    local.tee $7
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $1
+     local.get $3
+     local.get $7
+     i32.load16_s
+     call $~lib/array/Array<i16>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $5
+    i32.const 1
+    i32.add
+    local.set $5
+    br $for-loop|0
+   end
+  end
+  local.get $1
+  local.get $3
+  call $~lib/array/Array<i16>#set:length
   local.get $0
   call $~lib/map/Map<i8,i32>#values
   local.set $6
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 13
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
@@ -5876,12 +6499,12 @@
   local.set $5
   loop $for-loop|4
    local.get $2
-   local.get $4
+   local.get $1
    i32.load offset=12
    i32.lt_s
    if
     local.get $2
-    local.get $4
+    local.get $1
     i32.load offset=12
     i32.ge_u
     if
@@ -5892,20 +6515,20 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $4
+    local.get $1
     i32.load offset=4
     local.get $2
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
-    local.set $1
+    local.set $4
     local.get $6
     local.get $2
     call $~lib/array/Array<i32>#__get
     local.set $7
     local.get $0
-    local.get $1
+    local.get $4
     call $~lib/map/Map<i16,i32>#has
     i32.eqz
     if
@@ -5931,18 +6554,34 @@
      unreachable
     end
     local.get $3
-    local.get $1
-    local.get $1
+    local.get $4
+    local.get $4
     call $~lib/map/Map<i16,i16>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $5
     local.get $7
     i32.const 20
     i32.sub
-    local.tee $1
-    local.get $1
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $2
     i32.const 1
     i32.add
@@ -6081,7 +6720,15 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i16,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
     call $~lib/map/Map<i16,i32>#has
@@ -6139,27 +6786,51 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $1
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
- )
- (func $~lib/map/Map<u16,i32>#has (param $0 i32) (param $1 i32) (result i32)
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  local.get $1
-  local.get $1
-  i32.const 65535
-  i32.and
-  call $~lib/util/hash/hash16
-  call $~lib/map/Map<i16,i32>#find
-  i32.const 0
-  i32.ne
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<u16,i32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -6172,55 +6843,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 12
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 12
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load16_u
      i32.store16
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=4
      i32.store offset=4
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      i32.load16_u
      call $~lib/util/hash/hash16
      local.get $1
@@ -6228,85 +6898,113 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 12
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 12
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
-  end
-  local.get $6
-  local.tee $3
+  end
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<u16,i32>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 65535
   i32.and
   call $~lib/util/hash/hash16
-  local.tee $4
+  local.tee $3
+  local.set $4
+  local.get $0
+  local.get $1
+  local.get $3
   call $~lib/map/Map<i16,i32>#find
   local.tee $3
   if
@@ -6401,7 +7099,7 @@
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -6409,24 +7107,13 @@
   local.get $0
   i32.load offset=4
  )
- (func $~lib/map/Map<u16,i32>#keys (param $0 i32) (result i32)
+ (func $~lib/array/Array<u16>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
-  i32.load offset=8
-  local.set $4
-  local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 536870904
   i32.gt_u
   if
@@ -6437,94 +7124,71 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 1
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 15
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $5
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $6
   i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 12
-    i32.mul
-    i32.add
-    local.tee $2
-    i32.load offset=8
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i32.load16_u
-     call $~lib/array/Array<i16>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i16>#set:length
-  local.get $0
+  local.get $3
  )
  (func $~lib/map/Map<u16,u16>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -6537,55 +7201,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i32.load16_u
      i32.store16
+     local.get $4
      local.get $5
-     local.get $2
      i32.load16_u offset=2
      i32.store16 offset=2
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      i32.load16_u
      call $~lib/util/hash/hash16
      local.get $1
@@ -6593,73 +7256,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 8
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 8
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<u16,u16>#set (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -6862,9 +7551,13 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 14
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -6895,7 +7588,11 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<u16,i32>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -6912,10 +7609,22 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<u16,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<u16,i32>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -6972,7 +7681,11 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<u16,i32>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7007,10 +7720,22 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<u16,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<u16,i32>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7056,15 +7781,61 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
   local.get $0
-  call $~lib/map/Map<u16,i32>#keys
+  i32.load offset=8
   local.set $4
   local.get $0
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<u16>#constructor
+  local.set $1
+  loop $for-loop|0
+   local.get $5
+   local.get $6
+   i32.lt_s
+   if
+    local.get $4
+    local.get $5
+    i32.const 12
+    i32.mul
+    i32.add
+    local.tee $7
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $1
+     local.get $3
+     local.get $7
+     i32.load16_u
+     call $~lib/array/Array<i16>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $5
+    i32.const 1
+    i32.add
+    local.set $5
+    br $for-loop|0
+   end
+  end
+  local.get $1
+  local.get $3
+  call $~lib/array/Array<i16>#set:length
+  local.get $0
   call $~lib/map/Map<i8,i32>#values
   local.set $6
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 16
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $3
   i32.const 0
@@ -7090,12 +7861,12 @@
   local.set $5
   loop $for-loop|4
    local.get $2
-   local.get $4
+   local.get $1
    i32.load offset=12
    i32.lt_s
    if
     local.get $2
-    local.get $4
+    local.get $1
     i32.load offset=12
     i32.ge_u
     if
@@ -7106,21 +7877,25 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $4
+    local.get $1
     i32.load offset=4
     local.get $2
     i32.const 1
     i32.shl
     i32.add
     i32.load16_u
-    local.set $1
+    local.set $4
     local.get $6
     local.get $2
     call $~lib/array/Array<i32>#__get
     local.set $7
     local.get $0
-    local.get $1
-    call $~lib/map/Map<u16,i32>#has
+    local.get $4
+    local.get $4
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7134,7 +7909,12 @@
     local.get $7
     i32.const 20
     i32.sub
-    call $~lib/map/Map<u16,i32>#has
+    local.tee $8
+    local.get $8
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7145,18 +7925,34 @@
      unreachable
     end
     local.get $3
-    local.get $1
-    local.get $1
+    local.get $4
+    local.get $4
     call $~lib/map/Map<u16,u16>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $5
     local.get $7
     i32.const 20
     i32.sub
-    local.tee $1
-    local.get $1
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $2
     i32.const 1
     i32.add
@@ -7199,7 +7995,11 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<u16,i32>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7231,7 +8031,11 @@
     call $~lib/map/Map<u16,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<u16,i32>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -7270,7 +8074,11 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<u16,i32>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -7287,10 +8095,22 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<u16,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/map/Map<u16,i32>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7305,7 +8125,11 @@
     call $~lib/map/Map<u16,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<u16,i32>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/map/Map<i16,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -7345,25 +8169,51 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $1
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
- )
- (func $~lib/map/Map<i32,i32>#has (param $0 i32) (param $1 i32) (result i32)
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  local.get $1
-  local.get $1
-  call $~lib/util/hash/hash32
-  call $~lib/map/Map<i32,i32>#find
-  i32.const 0
-  i32.ne
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i32,i32>#get (param $0 i32) (param $1 i32) (result i32)
   local.get $0
@@ -7376,7 +8226,7 @@
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -7452,6 +8302,7 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 i32)
   call $~lib/map/Map<i32,i32>#constructor
   local.set $0
   loop $for-loop|0
@@ -7461,7 +8312,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -7476,10 +8329,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7532,7 +8395,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7563,10 +8428,20 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7610,21 +8485,23 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
   local.get $0
   i32.load offset=8
-  local.set $5
+  local.set $4
   local.get $0
   i32.load offset=16
   local.tee $6
   call $~lib/array/Array<i32>#constructor
   local.set $1
-  loop $for-loop|01
-   local.get $4
+  loop $for-loop|00
+   local.get $5
    local.get $6
    i32.lt_s
    if
-    local.get $5
     local.get $4
+    local.get $5
     i32.const 12
     i32.mul
     i32.add
@@ -7644,11 +8521,11 @@
      i32.add
      local.set $3
     end
-    local.get $4
+    local.get $5
     i32.const 1
     i32.add
-    local.set $4
-    br $for-loop|01
+    local.set $5
+    br $for-loop|00
    end
   end
   local.get $1
@@ -7660,7 +8537,7 @@
   call $~lib/map/Map<i32,i32>#constructor
   local.set $3
   call $~lib/map/Map<i32,i32>#constructor
-  local.set $4
+  local.set $5
   loop $for-loop|2
    local.get $2
    local.get $1
@@ -7670,14 +8547,16 @@
     local.get $1
     local.get $2
     call $~lib/array/Array<i32>#__get
-    local.set $5
+    local.set $4
     local.get $6
     local.get $2
     call $~lib/array/Array<i32>#__get
     local.set $7
     local.get $0
-    local.get $5
-    call $~lib/map/Map<i32,i32>#has
+    local.get $4
+    local.get $4
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7691,7 +8570,10 @@
     local.get $7
     i32.const 20
     i32.sub
-    call $~lib/map/Map<i32,i32>#has
+    local.tee $8
+    local.get $8
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7702,18 +8584,34 @@
      unreachable
     end
     local.get $3
-    local.get $5
-    local.get $5
-    call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
     local.get $4
+    local.get $4
+    call $~lib/map/Map<i32,i32>#set
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $5
     local.get $7
     i32.const 20
     i32.sub
-    local.tee $5
-    local.get $5
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $2
     i32.const 1
     i32.add
@@ -7733,7 +8631,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.load offset=20
   i32.const 100
   i32.ne
@@ -7754,7 +8652,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7784,7 +8684,9 @@
     call $~lib/map/Map<i32,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -7821,7 +8723,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -7836,10 +8740,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -7854,7 +8768,9 @@
     call $~lib/map/Map<i32,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -7895,34 +8811,58 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $5
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/map/Map<u32,i32>#keys (param $0 i32) (result i32)
+ (func $~lib/array/Array<u32>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
   local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 268435452
   i32.gt_u
   if
@@ -7933,94 +8873,71 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 2
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 18
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $5
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $6
   i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 12
-    i32.mul
-    i32.add
-    local.tee $2
-    i32.load offset=8
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i32.load
-     call $~lib/array/Array<i32>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i32>#set:length
-  local.get $0
+  local.get $3
  )
  (func $std/map/testNumeric<u32,i32>
   (local $0 i32)
@@ -8031,9 +8948,13 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 17
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -8062,7 +8983,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8077,10 +9000,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -8133,7 +9066,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -8164,10 +9099,20 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/map/Map<i32,i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -8185,81 +9130,129 @@
     i32.add
     i32.ne
     if
-     i32.const 0
-     i32.const 1312
-     i32.const 19
-     i32.const 5
-     call $~lib/builtins/abort
-     unreachable
+     i32.const 0
+     i32.const 1312
+     i32.const 19
+     i32.const 5
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|1
+   end
+  end
+  local.get $0
+  i32.load offset=20
+  i32.const 100
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 21
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $4
+  local.get $0
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<u32>#constructor
+  local.set $1
+  loop $for-loop|00
+   local.get $5
+   local.get $6
+   i32.lt_s
+   if
+    local.get $4
+    local.get $5
+    i32.const 12
+    i32.mul
+    i32.add
+    local.tee $7
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $1
+     local.get $3
+     local.get $7
+     i32.load
+     call $~lib/array/Array<i32>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
     end
-    local.get $1
+    local.get $5
     i32.const 1
     i32.add
-    local.set $1
-    br $for-loop|1
+    local.set $5
+    br $for-loop|00
    end
   end
-  local.get $0
-  i32.load offset=20
-  i32.const 100
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 21
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  call $~lib/map/Map<u32,i32>#keys
-  local.set $4
+  local.get $1
+  local.get $3
+  call $~lib/array/Array<i32>#set:length
   local.get $0
   call $~lib/map/Map<i8,i32>#values
   local.set $6
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 19
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $1
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=16
-  local.get $1
+  local.get $3
   i32.const 0
   i32.store offset=20
-  local.get $1
+  local.get $3
   call $~lib/map/Map<i8,i32>#clear
   call $~lib/map/Map<i32,i32>#constructor
   local.set $5
   loop $for-loop|2
    local.get $2
-   local.get $4
+   local.get $1
    i32.load offset=12
    i32.lt_s
    if
-    local.get $4
+    local.get $1
     local.get $2
     call $~lib/array/Array<i32>#__get
-    local.set $3
+    local.set $4
     local.get $6
     local.get $2
     call $~lib/array/Array<i32>#__get
     local.set $7
     local.get $0
-    local.get $3
-    call $~lib/map/Map<i32,i32>#has
+    local.get $4
+    local.get $4
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -8273,7 +9266,10 @@
     local.get $7
     i32.const 20
     i32.sub
-    call $~lib/map/Map<i32,i32>#has
+    local.tee $8
+    local.get $8
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -8283,19 +9279,35 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
-    local.get $3
     local.get $3
+    local.get $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $5
     local.get $7
     i32.const 20
     i32.sub
-    local.tee $3
-    local.get $3
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $2
     i32.const 1
     i32.add
@@ -8303,7 +9315,7 @@
     br $for-loop|2
    end
   end
-  local.get $1
+  local.get $3
   i32.load offset=20
   i32.const 100
   i32.ne
@@ -8336,7 +9348,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -8366,7 +9380,9 @@
     call $~lib/map/Map<i32,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8403,7 +9419,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8418,10 +9436,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -8436,7 +9464,9 @@
     call $~lib/map/Map<i32,i32>#delete
     local.get $0
     local.get $2
-    call $~lib/map/Map<i32,i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<i32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8476,25 +9506,69 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i64,i32>#clear (param $0 i32)
   (local $1 i32)
+  (local $2 i32)
   i32.const 16
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $1
   local.get $0
   i32.load
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store
@@ -8506,7 +9580,15 @@
   local.set $1
   local.get $0
   i32.load offset=8
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store offset=8
@@ -8627,15 +9709,6 @@
   end
   i32.const 0
  )
- (func $~lib/map/Map<i64,i32>#has (param $0 i32) (param $1 i64) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  call $~lib/util/hash/hash64
-  call $~lib/map/Map<i64,i32>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/map/Map<i64,i32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -8647,55 +9720,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 4
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 4
   i32.shl
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=12
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i64.load
      i64.store
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=8
      i32.store offset=8
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      i64.load
      call $~lib/util/hash/hash64
      local.get $1
@@ -8703,73 +9775,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=12
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 16
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 16
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i64,i32>#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
@@ -8872,7 +9970,7 @@
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -8880,6 +9978,89 @@
   local.get $0
   i32.load offset=8
  )
+ (func $~lib/array/Array<i64>#constructor (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.const 134217726
+  i32.gt_u
+  if
+   i32.const 1200
+   i32.const 1472
+   i32.const 57
+   i32.const 60
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
+  i32.const 3
+  i32.shl
+  local.tee $4
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 16
+  i32.const 21
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  i32.const 0
+  i32.store
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  i32.const 0
+  i32.store offset=8
+  local.get $3
+  i32.const 0
+  i32.store offset=12
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
+  i32.load
+  local.tee $5
+  i32.ne
+  if
+   local.get $2
+   call $~lib/rt/pure/__retain
+   local.set $2
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $3
+  local.get $2
+  i32.store
+  local.get $3
+  local.get $1
+  i32.store offset=4
+  local.get $3
+  local.get $4
+  i32.store offset=8
+  local.get $3
+  local.get $0
+  i32.store offset=12
+  local.get $3
+ )
  (func $~lib/array/Array<i64>#__set (param $0 i32) (param $1 i32) (param $2 i64)
   (local $3 i32)
   local.get $1
@@ -8930,123 +10111,6 @@
   local.get $1
   i32.store offset=12
  )
- (func $~lib/map/Map<i64,i32>#keys (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
-  local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
-  i32.const 134217726
-  i32.gt_u
-  if
-   i32.const 1200
-   i32.const 1472
-   i32.const 57
-   i32.const 60
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $6
-  i32.const 3
-  i32.shl
-  local.tee $5
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
-  i32.const 16
-  i32.const 21
-  call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/pure/__retain
-  local.tee $0
-  i32.const 0
-  i32.store
-  local.get $0
-  i32.const 0
-  i32.store offset=4
-  local.get $0
-  i32.const 0
-  i32.store offset=8
-  local.get $0
-  i32.const 0
-  i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
-  i32.load
-  local.tee $3
-  i32.ne
-  if
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
-  end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=4
-  local.get $0
-  local.get $5
-  i32.store offset=8
-  local.get $0
-  local.get $6
-  i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 4
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=12
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i64.load
-     call $~lib/array/Array<i64>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i64>#set:length
-  local.get $0
- )
  (func $~lib/map/Map<i64,i32>#values (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -9101,12 +10165,21 @@
  )
  (func $~lib/map/Map<i64,i64>#clear (param $0 i32)
   (local $1 i32)
+  (local $2 i32)
   i32.const 16
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $1
   local.get $0
   i32.load
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store
@@ -9118,7 +10191,15 @@
   local.set $1
   local.get $0
   i32.load offset=8
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store offset=8
@@ -9164,55 +10245,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 24
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 24
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=16
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      i64.load
      i64.store
+     local.get $4
      local.get $5
-     local.get $2
      i64.load offset=8
      i64.store offset=8
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      i64.load
      call $~lib/util/hash/hash64
      local.get $1
@@ -9220,73 +10300,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=16
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 24
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 24
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<i64,i64>#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32)
   (local $3 i32)
@@ -9483,9 +10589,14 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 i32)
+  (local $9 i64)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 20
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $1
   i32.const 0
@@ -9514,7 +10625,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -9530,10 +10643,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -9587,7 +10710,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -9620,10 +10745,20 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<i64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -9669,14 +10804,58 @@
    unreachable
   end
   local.get $1
-  call $~lib/map/Map<i64,i32>#keys
-  local.set $5
+  i32.load offset=8
+  local.set $7
+  local.get $1
+  i32.load offset=16
+  local.tee $5
+  call $~lib/array/Array<i64>#constructor
+  local.set $3
+  loop $for-loop|00
+   local.get $4
+   local.get $5
+   i32.lt_s
+   if
+    local.get $7
+    local.get $4
+    i32.const 4
+    i32.shl
+    i32.add
+    local.tee $8
+    i32.load offset=12
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $3
+     local.get $2
+     local.get $8
+     i64.load
+     call $~lib/array/Array<i64>#__set
+     local.get $2
+     i32.const 1
+     i32.add
+     local.set $2
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|00
+   end
+  end
+  local.get $3
+  local.get $2
+  call $~lib/array/Array<i64>#set:length
   local.get $1
   call $~lib/map/Map<i64,i32>#values
   local.set $7
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 22
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 0
@@ -9699,24 +10878,26 @@
   local.get $2
   call $~lib/map/Map<i64,i64>#clear
   call $~lib/map/Map<i32,i32>#constructor
-  local.set $6
+  local.set $4
   loop $for-loop|2
+   local.get $6
    local.get $3
-   local.get $5
    i32.load offset=12
    i32.lt_s
    if
-    local.get $5
     local.get $3
+    local.get $6
     call $~lib/array/Array<i64>#__get
     local.set $0
     local.get $7
-    local.get $3
+    local.get $6
     call $~lib/array/Array<i32>#__get
-    local.set $4
+    local.set $5
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -9727,11 +10908,14 @@
      unreachable
     end
     local.get $1
-    local.get $4
+    local.get $5
     i32.const 20
     i32.sub
     i64.extend_i32_s
-    call $~lib/map/Map<i64,i32>#has
+    local.tee $9
+    local.get $9
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -9745,19 +10929,35 @@
     local.get $0
     local.get $0
     call $~lib/map/Map<i64,i64>#set
-    call $~lib/rt/pure/__release
-    local.get $6
+    local.tee $8
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $8
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $4
+    local.get $5
     i32.const 20
     i32.sub
-    local.tee $4
-    local.get $4
+    local.tee $5
+    local.get $5
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
-    local.get $3
+    local.tee $5
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $5
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $6
     i32.const 1
     i32.add
-    local.set $3
+    local.set $6
     br $for-loop|2
    end
   end
@@ -9773,7 +10973,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  local.get $4
   i32.load offset=20
   i32.const 100
   i32.ne
@@ -9794,7 +10994,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -9825,7 +11027,9 @@
     call $~lib/map/Map<i64,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -9862,7 +11066,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -9878,10 +11084,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $6
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $6
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -9896,7 +11112,9 @@
     call $~lib/map/Map<i64,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -9936,35 +11154,59 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $7
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/map/Map<u64,i32>#keys (param $0 i32) (result i32)
+ (func $~lib/array/Array<u64>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
   local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 134217726
   i32.gt_u
   if
@@ -9975,94 +11217,71 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 3
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 24
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $5
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $6
   i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 4
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=12
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i64.load
-     call $~lib/array/Array<i64>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i64>#set:length
-  local.get $0
+  local.get $3
  )
  (func $std/map/testNumeric<u64,i32>
   (local $0 i64)
@@ -10073,9 +11292,14 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 i32)
+  (local $9 i64)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 23
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $1
   i32.const 0
@@ -10104,7 +11328,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -10120,10 +11346,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -10177,7 +11413,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -10210,10 +11448,20 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<i64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -10259,14 +11507,58 @@
    unreachable
   end
   local.get $1
-  call $~lib/map/Map<u64,i32>#keys
-  local.set $5
+  i32.load offset=8
+  local.set $7
+  local.get $1
+  i32.load offset=16
+  local.tee $5
+  call $~lib/array/Array<u64>#constructor
+  local.set $3
+  loop $for-loop|00
+   local.get $4
+   local.get $5
+   i32.lt_s
+   if
+    local.get $7
+    local.get $4
+    i32.const 4
+    i32.shl
+    i32.add
+    local.tee $8
+    i32.load offset=12
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $3
+     local.get $2
+     local.get $8
+     i64.load
+     call $~lib/array/Array<i64>#__set
+     local.get $2
+     i32.const 1
+     i32.add
+     local.set $2
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|00
+   end
+  end
+  local.get $3
+  local.get $2
+  call $~lib/array/Array<i64>#set:length
   local.get $1
   call $~lib/map/Map<i64,i32>#values
   local.set $7
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 25
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 0
@@ -10289,24 +11581,26 @@
   local.get $2
   call $~lib/map/Map<i64,i64>#clear
   call $~lib/map/Map<i32,i32>#constructor
-  local.set $6
+  local.set $4
   loop $for-loop|2
+   local.get $6
    local.get $3
-   local.get $5
    i32.load offset=12
    i32.lt_s
    if
-    local.get $5
     local.get $3
+    local.get $6
     call $~lib/array/Array<i64>#__get
     local.set $0
     local.get $7
-    local.get $3
+    local.get $6
     call $~lib/array/Array<i32>#__get
-    local.set $4
+    local.set $5
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -10317,11 +11611,14 @@
      unreachable
     end
     local.get $1
-    local.get $4
+    local.get $5
     i32.const 20
     i32.sub
     i64.extend_i32_s
-    call $~lib/map/Map<i64,i32>#has
+    local.tee $9
+    local.get $9
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -10335,19 +11632,35 @@
     local.get $0
     local.get $0
     call $~lib/map/Map<i64,i64>#set
-    call $~lib/rt/pure/__release
-    local.get $6
+    local.tee $8
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $8
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $4
+    local.get $5
     i32.const 20
     i32.sub
-    local.tee $4
-    local.get $4
+    local.tee $5
+    local.get $5
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
-    local.get $3
+    local.tee $5
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $5
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $6
     i32.const 1
     i32.add
-    local.set $3
+    local.set $6
     br $for-loop|2
    end
   end
@@ -10363,7 +11676,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  local.get $4
   i32.load offset=20
   i32.const 100
   i32.ne
@@ -10384,7 +11697,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -10415,7 +11730,9 @@
     call $~lib/map/Map<i64,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -10452,7 +11769,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -10468,10 +11787,20 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<i64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $6
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $6
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -10486,7 +11815,9 @@
     call $~lib/map/Map<i64,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<i64,i32>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<i64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -10515,27 +11846,62 @@
    unreachable
   end
   local.get $1
-  call $~lib/map/Map<i64,i32>#clear
-  local.get $1
-  i32.load offset=20
+  call $~lib/map/Map<i64,i32>#clear
+  local.get $1
+  i32.load offset=20
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 60
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $7
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 1556
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1312
-   i32.const 60
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<f32,i32>#find (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   local.get $0
@@ -10578,16 +11944,6 @@
   end
   i32.const 0
  )
- (func $~lib/map/Map<f32,i32>#has (param $0 i32) (param $1 f32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i32.reinterpret_f32
-  call $~lib/util/hash/hash32
-  call $~lib/map/Map<f32,i32>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/map/Map<f32,i32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10599,55 +11955,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 12
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 12
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      f32.load
      f32.store
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=4
      i32.store offset=4
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      f32.load
      i32.reinterpret_f32
      call $~lib/util/hash/hash32
@@ -10656,84 +12011,112 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 12
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 12
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<f32,i32>#set (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.reinterpret_f32
   call $~lib/util/hash/hash32
-  local.tee $4
+  local.tee $3
+  local.set $4
+  local.get $0
+  local.get $1
+  local.get $3
   call $~lib/map/Map<f32,i32>#find
   local.tee $3
   if
@@ -10827,7 +12210,7 @@
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -10835,25 +12218,13 @@
   local.get $0
   i32.load offset=4
  )
- (func $~lib/map/Map<f32,i32>#keys (param $0 i32) (result i32)
+ (func $~lib/array/Array<f32>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 f32)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
   local.get $0
-  i32.load offset=16
-  local.tee $8
-  local.set $7
-  local.get $8
   i32.const 268435452
   i32.gt_u
   if
@@ -10864,82 +12235,112 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $7
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 2
   i32.shl
-  local.tee $6
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $6
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 27
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $4
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $6
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $7
   i32.store offset=12
+  local.get $3
+ )
+ (func $~lib/map/Map<f32,i32>#keys (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f32)
+  local.get $0
+  i32.load offset=8
+  local.set $4
+  local.get $0
+  i32.load offset=16
+  local.tee $5
+  call $~lib/array/Array<f32>#constructor
+  local.set $0
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $2
+   local.get $5
    i32.lt_s
    if
-    local.get $5
-    local.get $9
+    local.get $4
+    local.get $2
     i32.const 12
     i32.mul
     i32.add
-    local.tee $2
+    local.tee $3
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $2
+     local.get $3
      f32.load
-     local.set $3
-     local.get $10
+     local.set $6
+     local.get $1
      local.get $0
      i32.load offset=12
      i32.ge_u
      if
-      local.get $10
+      local.get $1
       i32.const 0
       i32.lt_s
       if
@@ -10951,38 +12352,38 @@
        unreachable
       end
       local.get $0
-      local.get $10
+      local.get $1
       i32.const 1
       i32.add
-      local.tee $2
+      local.tee $3
       i32.const 2
       call $~lib/array/ensureSize
       local.get $0
-      local.get $2
+      local.get $3
       i32.store offset=12
      end
      local.get $0
      i32.load offset=4
-     local.get $10
+     local.get $1
      i32.const 2
      i32.shl
      i32.add
-     local.get $3
+     local.get $6
      f32.store
-     local.get $10
+     local.get $1
      i32.const 1
      i32.add
-     local.set $10
+     local.set $1
     end
-    local.get $9
+    local.get $2
     i32.const 1
     i32.add
-    local.set $9
+    local.set $2
     br $for-loop|0
    end
   end
   local.get $0
-  local.get $10
+  local.get $1
   call $~lib/array/Array<i32>#set:length
   local.get $0
  )
@@ -10997,55 +12398,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 12
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 12
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      f32.load
      f32.store
+     local.get $4
      local.get $5
-     local.get $2
      f32.load offset=4
      f32.store offset=4
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      f32.load
      i32.reinterpret_f32
      call $~lib/util/hash/hash32
@@ -11054,84 +12454,112 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 12
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 12
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<f32,f32>#set (param $0 i32) (param $1 f32) (param $2 f32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.reinterpret_f32
   call $~lib/util/hash/hash32
-  local.tee $5
+  local.tee $3
+  local.set $4
+  local.get $0
+  local.get $1
+  local.get $3
   call $~lib/map/Map<f32,i32>#find
   local.tee $3
   if
@@ -11173,11 +12601,11 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $4
+   local.tee $5
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $4
+   local.get $5
    i32.const 12
    i32.mul
    i32.add
@@ -11196,7 +12624,7 @@
    local.get $3
    local.get $0
    i32.load
-   local.get $5
+   local.get $4
    local.get $0
    i32.load offset=4
    i32.and
@@ -11283,9 +12711,14 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 f32)
+  (local $9 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 26
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $1
   i32.const 0
@@ -11314,7 +12747,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -11330,10 +12766,21 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<f32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -11387,7 +12834,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -11420,10 +12870,21 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<f32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -11470,13 +12931,16 @@
   end
   local.get $1
   call $~lib/map/Map<f32,i32>#keys
-  local.set $4
+  local.set $5
   local.get $1
   call $~lib/map/Map<i8,i32>#values
   local.set $7
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 28
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 0
@@ -11502,12 +12966,12 @@
   local.set $6
   loop $for-loop|2
    local.get $3
-   local.get $4
+   local.get $5
    i32.load offset=12
    i32.lt_s
    if
     local.get $3
-    local.get $4
+    local.get $5
     i32.load offset=12
     i32.ge_u
     if
@@ -11518,7 +12982,7 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $4
+    local.get $5
     i32.load offset=4
     local.get $3
     i32.const 2
@@ -11529,10 +12993,13 @@
     local.get $7
     local.get $3
     call $~lib/array/Array<i32>#__get
-    local.set $5
+    local.set $4
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -11543,11 +13010,15 @@
      unreachable
     end
     local.get $1
-    local.get $5
+    local.get $4
     i32.const 20
     i32.sub
     f32.convert_i32_s
-    call $~lib/map/Map<f32,i32>#has
+    local.tee $8
+    local.get $8
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -11561,15 +13032,31 @@
     local.get $0
     local.get $0
     call $~lib/map/Map<f32,f32>#set
-    call $~lib/rt/pure/__release
+    local.tee $9
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $9
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $6
-    local.get $5
+    local.get $4
     i32.const 20
     i32.sub
-    local.tee $5
-    local.get $5
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $3
     i32.const 1
     i32.add
@@ -11610,7 +13097,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -11641,7 +13131,10 @@
     call $~lib/map/Map<f32,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -11678,7 +13171,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -11694,10 +13190,21 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<f32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -11712,7 +13219,10 @@
     call $~lib/map/Map<f32,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<f32,i32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<f32,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -11728,40 +13238,75 @@
     br $for-loop|4
    end
   end
-  local.get $1
-  i32.load offset=20
-  i32.const 50
-  i32.ne
+  local.get $1
+  i32.load offset=20
+  i32.const 50
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 56
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  call $~lib/map/Map<i8,i32>#clear
+  local.get $1
+  i32.load offset=20
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 60
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $5
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $7
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 1556
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1312
-   i32.const 56
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
   local.get $1
-  call $~lib/map/Map<i8,i32>#clear
-  local.get $1
-  i32.load offset=20
+  i32.const 1556
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1312
-   i32.const 60
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<f64,i32>#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   local.get $0
@@ -11804,16 +13349,6 @@
   end
   i32.const 0
  )
- (func $~lib/map/Map<f64,i32>#has (param $0 i32) (param $1 f64) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i64.reinterpret_f64
-  call $~lib/util/hash/hash64
-  call $~lib/map/Map<f64,i32>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/map/Map<f64,i32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -11825,55 +13360,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 4
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 4
   i32.shl
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=12
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      f64.load
      f64.store
+     local.get $4
      local.get $5
-     local.get $2
      i32.load offset=8
      i32.store offset=8
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      f64.load
      i64.reinterpret_f64
      call $~lib/util/hash/hash64
@@ -11882,84 +13416,112 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=12
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 16
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 16
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<f64,i32>#set (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i64.reinterpret_f64
   call $~lib/util/hash/hash64
-  local.tee $4
+  local.tee $3
+  local.set $4
+  local.get $0
+  local.get $1
+  local.get $3
   call $~lib/map/Map<f64,i32>#find
   local.tee $3
   if
@@ -12053,7 +13615,7 @@
   if
    i32.const 1360
    i32.const 1424
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -12061,25 +13623,13 @@
   local.get $0
   i32.load offset=8
  )
- (func $~lib/map/Map<f64,i32>#keys (param $0 i32) (result i32)
+ (func $~lib/array/Array<f64>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 f64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
   local.get $0
-  i32.load offset=16
-  local.tee $8
-  local.set $7
-  local.get $8
   i32.const 134217726
   i32.gt_u
   if
@@ -12090,82 +13640,112 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $7
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 3
   i32.shl
-  local.tee $6
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $6
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 30
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $4
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $6
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
+  local.get $0
+  i32.store offset=12
+  local.get $3
+ )
+ (func $~lib/map/Map<f64,i32>#keys (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f64)
+  local.get $0
+  i32.load offset=8
+  local.set $4
   local.get $0
-  local.get $7
-  i32.store offset=12
+  i32.load offset=16
+  local.tee $5
+  call $~lib/array/Array<f64>#constructor
+  local.set $0
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $2
+   local.get $5
    i32.lt_s
    if
-    local.get $5
-    local.get $9
+    local.get $4
+    local.get $2
     i32.const 4
     i32.shl
     i32.add
-    local.tee $2
+    local.tee $3
     i32.load offset=12
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $2
+     local.get $3
      f64.load
-     local.set $3
-     local.get $10
+     local.set $6
+     local.get $1
      local.get $0
      i32.load offset=12
      i32.ge_u
      if
-      local.get $10
+      local.get $1
       i32.const 0
       i32.lt_s
       if
@@ -12177,38 +13757,38 @@
        unreachable
       end
       local.get $0
-      local.get $10
+      local.get $1
       i32.const 1
       i32.add
-      local.tee $2
+      local.tee $3
       i32.const 3
       call $~lib/array/ensureSize
       local.get $0
-      local.get $2
+      local.get $3
       i32.store offset=12
      end
      local.get $0
      i32.load offset=4
-     local.get $10
+     local.get $1
      i32.const 3
      i32.shl
      i32.add
-     local.get $3
+     local.get $6
      f64.store
-     local.get $10
+     local.get $1
      i32.const 1
      i32.add
-     local.set $10
+     local.set $1
     end
-    local.get $9
+    local.get $2
     i32.const 1
     i32.add
-    local.set $9
+    local.set $2
     br $for-loop|0
    end
   end
   local.get $0
-  local.get $10
+  local.get $1
   call $~lib/array/Array<i64>#set:length
   local.get $0
  )
@@ -12223,55 +13803,54 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $4
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $7
+  local.tee $8
   i32.const 24
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $4
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   local.get $0
   i32.load offset=16
   i32.const 24
   i32.mul
   i32.add
-  local.set $8
-  local.get $4
-  local.set $5
+  local.set $7
+  local.get $2
+  local.set $4
   loop $while-continue|0
-   local.get $3
-   local.get $8
+   local.get $5
+   local.get $7
    i32.ne
    if
-    local.get $3
-    local.tee $2
+    local.get $5
     i32.load offset=16
     i32.const 1
     i32.and
     i32.eqz
     if
+     local.get $4
      local.get $5
-     local.get $2
      f64.load
      f64.store
+     local.get $4
      local.get $5
-     local.get $2
      f64.load offset=8
      f64.store offset=8
+     local.get $4
+     local.get $3
      local.get $5
-     local.get $6
-     local.get $2
      f64.load
      i64.reinterpret_f64
      call $~lib/util/hash/hash64
@@ -12280,73 +13859,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $6
      i32.load
      i32.store offset=16
-     local.get $2
-     local.get $5
+     local.get $6
+     local.get $4
      i32.store
-     local.get $5
+     local.get $4
      i32.const 24
      i32.add
-     local.set $5
+     local.set $4
     end
-    local.get $3
+    local.get $5
     i32.const 24
     i32.add
-    local.set $3
+    local.set $5
     br $while-continue|0
    end
   end
-  local.get $6
-  local.tee $3
+  local.get $3
+  local.tee $5
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $5
+  local.tee $4
   i32.ne
   if
-   local.get $3
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $5
-   call $~lib/rt/pure/__release
+   call $~lib/rt/pure/__retain
+   local.set $5
+   local.get $4
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $3
+  local.get $0
+  local.get $5
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $4
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $5
+   i32.const 1556
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $7
+  local.get $0
+  local.get $8
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/map/Map<f64,f64>#set (param $0 i32) (param $1 f64) (param $2 f64) (result i32)
   (local $3 i32)
@@ -12545,9 +14150,14 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
+  (local $8 f64)
+  (local $9 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 29
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $1
   i32.const 0
@@ -12576,7 +14186,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -12592,10 +14205,21 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<f64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -12649,7 +14273,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -12682,10 +14309,21 @@
     i32.const 20
     i32.add
     call $~lib/map/Map<f64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -12732,13 +14370,16 @@
   end
   local.get $1
   call $~lib/map/Map<f64,i32>#keys
-  local.set $4
+  local.set $5
   local.get $1
   call $~lib/map/Map<i64,i32>#values
   local.set $7
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 31
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $2
   i32.const 0
@@ -12764,12 +14405,12 @@
   local.set $6
   loop $for-loop|2
    local.get $3
-   local.get $4
+   local.get $5
    i32.load offset=12
    i32.lt_s
    if
     local.get $3
-    local.get $4
+    local.get $5
     i32.load offset=12
     i32.ge_u
     if
@@ -12780,7 +14421,7 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $4
+    local.get $5
     i32.load offset=4
     local.get $3
     i32.const 3
@@ -12791,10 +14432,13 @@
     local.get $7
     local.get $3
     call $~lib/array/Array<i32>#__get
-    local.set $5
+    local.set $4
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -12805,11 +14449,15 @@
      unreachable
     end
     local.get $1
-    local.get $5
+    local.get $4
     i32.const 20
     i32.sub
     f64.convert_i32_s
-    call $~lib/map/Map<f64,i32>#has
+    local.tee $8
+    local.get $8
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -12823,15 +14471,31 @@
     local.get $0
     local.get $0
     call $~lib/map/Map<f64,f64>#set
-    call $~lib/rt/pure/__release
+    local.tee $9
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $9
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $6
-    local.get $5
+    local.get $4
     i32.const 20
     i32.sub
-    local.tee $5
-    local.get $5
+    local.tee $4
+    local.get $4
     call $~lib/map/Map<i32,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $3
     i32.const 1
     i32.add
@@ -12872,7 +14536,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -12903,7 +14570,10 @@
     call $~lib/map/Map<f64,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -12940,7 +14610,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -12956,10 +14629,21 @@
     i32.const 10
     i32.add
     call $~lib/map/Map<f64,i32>#set
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1556
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     i32.eqz
     if
      i32.const 0
@@ -12974,7 +14658,10 @@
     call $~lib/map/Map<f64,i32>#delete
     local.get $1
     local.get $0
-    call $~lib/map/Map<f64,i32>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/map/Map<f64,i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -13014,16 +14701,51 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $7
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1556
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   call $std/map/testNumeric<i8,i32>
diff --git a/tests/compiler/std/map.untouched.wat b/tests/compiler/std/map.untouched.wat
index cb8759d371..2753f5e867 100644
--- a/tests/compiler/std/map.untouched.wat
+++ b/tests/compiler/std/map.untouched.wat
@@ -2,6 +2,7 @@
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
@@ -14,16 +15,17 @@
  (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_f32_=>_none (func (param i32 i32 f32)))
  (type $i32_i32_f64_=>_none (func (param i32 i32 f64)))
  (type $i32_i64_i64_=>_i32 (func (param i32 i64 i64) (result i32)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (type $i32_i32_=>_f64 (func (param i32 i32) (result f64)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_f32_f32_=>_i32 (func (param i32 f32 f32) (result i32)))
  (type $i32_f64_f64_=>_i32 (func (param i32 f64 f64) (result i32)))
- (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $f32_=>_i32 (func (param f32) (result i32)))
+ (type $f64_=>_i32 (func (param f64) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -50,6 +52,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 548))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -58,9 +123,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -73,7 +135,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -100,7 +162,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -154,7 +216,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -179,77 +241,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -266,6 +286,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -277,8 +303,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -286,7 +310,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -303,28 +327,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -335,44 +349,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -380,30 +384,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -422,22 +422,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -463,7 +463,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -475,18 +475,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -540,27 +540,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -575,24 +563,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -602,31 +576,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -634,8 +592,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -661,24 +617,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -686,7 +640,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -694,16 +648,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -719,7 +673,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -728,8 +682,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -740,49 +694,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -795,10 +745,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -848,73 +794,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -927,11 +846,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -951,7 +870,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -977,9 +896,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1047,31 +963,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1084,79 +993,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1193,9 +1071,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1209,12 +1085,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1224,7 +1100,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1261,7 +1137,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1312,29 +1188,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1354,7 +1210,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1401,7 +1257,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1422,7 +1278,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1443,7 +1299,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1543,219 +1399,214 @@
   end
   local.get $0
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
@@ -1791,9 +1642,28 @@
    call $~lib/rt/pure/decrement
   end
  )
+ (func $~lib/map/ENTRY_ALIGN<i8,i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<i8,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<i8,i32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<i8,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -1810,16 +1680,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<i8,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -1870,6 +1744,25 @@
   i32.const 16777619
   i32.mul
  )
+ (func $~lib/util/hash/HASH<i8> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  i32.const 1
+  i32.eq
+  drop
+  local.get $0
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  call $~lib/util/hash/hash8
+  return
+ )
  (func $~lib/map/Map<i8,i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -1923,30 +1816,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<i8,i32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i8>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
   call $~lib/map/Map<i8,i32>#find
   i32.const 0
   i32.ne
@@ -1982,7 +1855,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<i8,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -1992,7 +1865,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<i8,i32>
   i32.mul
   i32.add
   local.set $7
@@ -2023,24 +1896,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<i8>|inlined.2 (result i32)
-      local.get $10
-      i32.load8_s
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      i32.const 1
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash8
-      br $~lib/util/hash/HASH<i8>|inlined.2
-     end
+     local.get $10
+     i32.load8_s
+     call $~lib/util/hash/HASH<i8>
      local.get $1
      i32.and
      local.set $12
@@ -2058,12 +1916,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<i8,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i8,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -2123,38 +1981,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<i8>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $3
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<i8,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -2190,8 +2029,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -2200,14 +2039,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<i8,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store8
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -2218,7 +2057,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -2226,14 +2065,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=8
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -2241,43 +2080,23 @@
  )
  (func $~lib/map/Map<i8,i32>#get (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i8>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
   call $~lib/map/Map<i8,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
  )
  (func $~lib/map/Map<i8,i32>#get:size (param $0 i32) (result i32)
@@ -2405,7 +2224,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -3436,238 +3255,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
-      i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
@@ -3718,22 +3532,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -3744,25 +3548,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
@@ -3973,7 +3777,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i8,i32>
     i32.mul
     i32.add
     local.set $7
@@ -4179,7 +3983,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i8,i32>
     i32.mul
     i32.add
     local.set $7
@@ -4212,9 +4016,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<i8,i8> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<i8,i8> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<i8,i8>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<i8,i8>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -4231,16 +4054,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<i8,i8>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -4284,9 +4111,28 @@
   call $~lib/map/Map<i8,i8>#clear
   local.get $0
  )
+ (func $~lib/map/ENTRY_ALIGN<i32,i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<i32,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<i32,i32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<i32,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -4303,16 +4149,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<i32,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -4505,7 +4355,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<i8,i8>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -4515,7 +4365,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<i8,i8>
   i32.mul
   i32.add
   local.set $7
@@ -4546,24 +4396,9 @@
      local.get $10
      i32.load8_s offset=1
      i32.store8 offset=1
-     block $~lib/util/hash/HASH<i8>|inlined.5 (result i32)
-      local.get $10
-      i32.load8_s
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      i32.const 1
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash8
-      br $~lib/util/hash/HASH<i8>|inlined.5
-     end
+     local.get $10
+     i32.load8_s
+     call $~lib/util/hash/HASH<i8>
      local.get $1
      i32.and
      local.set $12
@@ -4581,12 +4416,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/map/ENTRY_SIZE<i8,i8>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/map/ENTRY_SIZE<i8,i8>
     i32.add
     local.set $6
     br $while-continue|0
@@ -4646,38 +4481,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<i8>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $3
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<i8,i8>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store8 offset=1
   else
@@ -4713,8 +4529,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -4723,14 +4539,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 8
+   call $~lib/map/ENTRY_SIZE<i8,i8>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store8
-   local.get $5
+   local.get $4
    local.get $2
    i32.store8 offset=1
    local.get $0
@@ -4741,7 +4557,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -4749,14 +4565,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=4
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -4796,13 +4612,36 @@
   local.set $1
   local.get $1
   local.get $0
-  i32.const 24
-  i32.shr_u
-  i32.xor
-  i32.const 16777619
-  i32.mul
-  local.set $1
-  local.get $1
+  i32.const 24
+  i32.shr_u
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.set $1
+  local.get $1
+ )
+ (func $~lib/util/hash/HASH<i32> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 4
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash32
+  return
  )
  (func $~lib/map/Map<i32,i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -4883,7 +4722,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<i32,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -4893,7 +4732,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<i32,i32>
   i32.mul
   i32.add
   local.set $7
@@ -4924,32 +4763,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<i32>|inlined.1 (result i32)
-      local.get $10
-      i32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 4
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<i32>|inlined.1
-     end
+     local.get $10
+     i32.load
+     call $~lib/util/hash/HASH<i32>
      local.get $1
      i32.and
      local.set $12
@@ -4967,12 +4783,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<i32,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i32,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -5032,42 +4848,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<i32>|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.0
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<i32>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<i32,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -5103,8 +4896,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -5113,14 +4906,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<i32,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -5131,7 +4924,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -5139,14 +4932,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=8
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -5167,30 +4960,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i8>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
   call $~lib/map/Map<i8,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -5200,8 +4974,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -5216,16 +4990,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -5245,7 +5019,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<i8,i32>#rehash
   end
   i32.const 1
@@ -5759,9 +5533,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/map/ENTRY_ALIGN<u8,i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<u8,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u8,i32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<u8,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -5778,16 +5571,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u8,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -5831,6 +5628,23 @@
   call $~lib/map/Map<u8,i32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u8> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  i32.const 1
+  i32.eq
+  drop
+  local.get $0
+  i32.const 255
+  i32.and
+  call $~lib/util/hash/hash8
+  return
+ )
  (func $~lib/map/Map<u8,i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -5882,28 +5696,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<u8,i32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u8>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
   call $~lib/map/Map<u8,i32>#find
   i32.const 0
   i32.ne
@@ -5939,7 +5735,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u8,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -5949,7 +5745,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u8,i32>
   i32.mul
   i32.add
   local.set $7
@@ -5980,24 +5776,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<u8>|inlined.2 (result i32)
-      local.get $10
-      i32.load8_u
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      i32.const 1
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash8
-      br $~lib/util/hash/HASH<u8>|inlined.2
-     end
+     local.get $10
+     i32.load8_u
+     call $~lib/util/hash/HASH<u8>
      local.get $1
      i32.and
      local.set $12
@@ -6015,12 +5796,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<u8,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u8,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -6080,36 +5861,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<u8>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $3
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u8,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -6145,8 +5909,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -6155,14 +5919,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<u8,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store8
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -6173,7 +5937,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -6181,56 +5945,38 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
-   local.get $6
-   i32.load
-   i32.store offset=8
+   local.get $4
    local.get $6
-   local.get $5
-   i32.store
-   local.get $3
-   call $~lib/rt/pure/__release
-  end
-  local.get $0
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/map/Map<u8,i32>#get (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<u8>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.3
+   i32.load
+   i32.store offset=8
+   local.get $6
+   local.get $4
+   i32.store
+   local.get $5
+   call $~lib/rt/pure/__release
   end
+  local.get $0
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/map/Map<u8,i32>#get (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
   call $~lib/map/Map<u8,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
  )
  (func $~lib/map/Map<u8,i32>#get:size (param $0 i32) (result i32)
@@ -6410,7 +6156,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u8,i32>
     i32.mul
     i32.add
     local.set $7
@@ -6475,7 +6221,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u8,i32>
     i32.mul
     i32.add
     local.set $7
@@ -6508,9 +6254,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<u8,u8> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<u8,u8> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u8,u8>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<u8,u8>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -6527,16 +6292,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u8,u8>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -6696,7 +6465,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<u8,u8>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -6706,7 +6475,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<u8,u8>
   i32.mul
   i32.add
   local.set $7
@@ -6737,24 +6506,9 @@
      local.get $10
      i32.load8_u offset=1
      i32.store8 offset=1
-     block $~lib/util/hash/HASH<u8>|inlined.5 (result i32)
-      local.get $10
-      i32.load8_u
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      i32.const 1
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash8
-      br $~lib/util/hash/HASH<u8>|inlined.5
-     end
+     local.get $10
+     i32.load8_u
+     call $~lib/util/hash/HASH<u8>
      local.get $1
      i32.and
      local.set $12
@@ -6772,12 +6526,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/map/ENTRY_SIZE<u8,u8>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/map/ENTRY_SIZE<u8,u8>
     i32.add
     local.set $6
     br $while-continue|0
@@ -6837,36 +6591,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<u8>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $3
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u8,u8>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store8 offset=1
   else
@@ -6902,8 +6639,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -6912,14 +6649,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 8
+   call $~lib/map/ENTRY_SIZE<u8,u8>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store8
-   local.get $5
+   local.get $4
    local.get $2
    i32.store8 offset=1
    local.get $0
@@ -6930,7 +6667,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -6938,14 +6675,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=4
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -6962,28 +6699,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u8>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
   call $~lib/map/Map<u8,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -6993,8 +6713,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -7009,16 +6729,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -7038,7 +6758,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<u8,i32>#rehash
   end
   i32.const 1
@@ -7530,9 +7250,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/map/ENTRY_ALIGN<i16,i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<i16,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<i16,i32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<i16,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -7549,16 +7288,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<i16,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -7624,6 +7367,29 @@
   local.set $1
   local.get $1
  )
+ (func $~lib/util/hash/HASH<i16> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 2
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 2
+  i32.const 2
+  i32.eq
+  drop
+  local.get $0
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  call $~lib/util/hash/hash16
+  return
+ )
  (func $~lib/map/Map<i16,i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -7677,34 +7443,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<i16,i32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i16>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
   call $~lib/map/Map<i16,i32>#find
   i32.const 0
   i32.ne
@@ -7740,7 +7482,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<i16,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -7750,7 +7492,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<i16,i32>
   i32.mul
   i32.add
   local.set $7
@@ -7781,28 +7523,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<i16>|inlined.2 (result i32)
-      local.get $10
-      i32.load16_s
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 2
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 2
-      i32.const 2
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash16
-      br $~lib/util/hash/HASH<i16>|inlined.2
-     end
+     local.get $10
+     i32.load16_s
+     call $~lib/util/hash/HASH<i16>
      local.get $1
      i32.and
      local.set $12
@@ -7820,12 +7543,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<i16,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i16,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -7885,42 +7608,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<i16>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $3
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<i16,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -7956,8 +7656,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -7966,14 +7666,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<i16,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store16
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -7984,7 +7684,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -7992,14 +7692,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=8
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -8007,47 +7707,23 @@
  )
  (func $~lib/map/Map<i16,i32>#get (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i16>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
   call $~lib/map/Map<i16,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
  )
  (func $~lib/map/Map<i16,i32>#get:size (param $0 i32) (result i32)
@@ -8227,7 +7903,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i16,i32>
     i32.mul
     i32.add
     local.set $7
@@ -8292,7 +7968,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i16,i32>
     i32.mul
     i32.add
     local.set $7
@@ -8325,9 +8001,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<i16,i16> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<i16,i16> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<i16,i16>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<i16,i16>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -8344,16 +8039,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<i16,i16>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -8515,7 +8214,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<i16,i16>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -8525,7 +8224,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<i16,i16>
   i32.mul
   i32.add
   local.set $7
@@ -8556,28 +8255,9 @@
      local.get $10
      i32.load16_s offset=2
      i32.store16 offset=2
-     block $~lib/util/hash/HASH<i16>|inlined.5 (result i32)
-      local.get $10
-      i32.load16_s
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 2
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 2
-      i32.const 2
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash16
-      br $~lib/util/hash/HASH<i16>|inlined.5
-     end
+     local.get $10
+     i32.load16_s
+     call $~lib/util/hash/HASH<i16>
      local.get $1
      i32.and
      local.set $12
@@ -8595,12 +8275,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/map/ENTRY_SIZE<i16,i16>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/map/ENTRY_SIZE<i16,i16>
     i32.add
     local.set $6
     br $while-continue|0
@@ -8660,42 +8340,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<i16>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $3
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<i16,i16>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store16 offset=2
   else
@@ -8731,8 +8388,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -8741,14 +8398,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 8
+   call $~lib/map/ENTRY_SIZE<i16,i16>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store16
-   local.get $5
+   local.get $4
    local.get $2
    i32.store16 offset=2
    local.get $0
@@ -8759,7 +8416,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -8767,14 +8424,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=4
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -8791,34 +8448,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i16>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
   call $~lib/map/Map<i16,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -8828,8 +8462,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -8844,16 +8478,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -8873,7 +8507,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<i16,i32>#rehash
   end
   i32.const 1
@@ -9387,9 +9021,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/map/ENTRY_ALIGN<u16,i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<u16,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u16,i32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<u16,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -9406,16 +9059,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u16,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -9459,6 +9116,27 @@
   call $~lib/map/Map<u16,i32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u16> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 2
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 2
+  i32.const 2
+  i32.eq
+  drop
+  local.get $0
+  i32.const 65535
+  i32.and
+  call $~lib/util/hash/hash16
+  return
+ )
  (func $~lib/map/Map<u16,i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -9494,48 +9172,26 @@
      i32.const 0
     end
     if
-     local.get $3
-     return
-    end
-    local.get $3
-    i32.load offset=8
-    i32.const 1
-    i32.const -1
-    i32.xor
-    i32.and
-    local.set $3
-    br $while-continue|0
-   end
-  end
-  i32.const 0
- )
- (func $~lib/map/Map<u16,i32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<u16>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.0
+     local.get $3
+     return
+    end
+    local.get $3
+    i32.load offset=8
+    i32.const 1
+    i32.const -1
+    i32.xor
+    i32.and
+    local.set $3
+    br $while-continue|0
+   end
   end
+  i32.const 0
+ )
+ (func $~lib/map/Map<u16,i32>#has (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
   call $~lib/map/Map<u16,i32>#find
   i32.const 0
   i32.ne
@@ -9571,7 +9227,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u16,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -9581,7 +9237,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u16,i32>
   i32.mul
   i32.add
   local.set $7
@@ -9612,28 +9268,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<u16>|inlined.2 (result i32)
-      local.get $10
-      i32.load16_u
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 2
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 2
-      i32.const 2
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash16
-      br $~lib/util/hash/HASH<u16>|inlined.2
-     end
+     local.get $10
+     i32.load16_u
+     call $~lib/util/hash/HASH<u16>
      local.get $1
      i32.and
      local.set $12
@@ -9651,12 +9288,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<u16,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u16,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -9716,40 +9353,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<u16>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $3
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u16,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -9785,8 +9401,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -9795,14 +9411,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<u16,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store16
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -9813,7 +9429,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -9821,14 +9437,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=8
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -9836,45 +9452,23 @@
  )
  (func $~lib/map/Map<u16,i32>#get (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u16>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
   call $~lib/map/Map<u16,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
  )
  (func $~lib/map/Map<u16,i32>#get:size (param $0 i32) (result i32)
@@ -10054,7 +9648,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u16,i32>
     i32.mul
     i32.add
     local.set $7
@@ -10119,7 +9713,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u16,i32>
     i32.mul
     i32.add
     local.set $7
@@ -10152,9 +9746,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<u16,u16> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<u16,u16> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u16,u16>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<u16,u16>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -10171,16 +9784,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u16,u16>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -10340,7 +9957,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<u16,u16>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -10350,7 +9967,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/map/ENTRY_SIZE<u16,u16>
   i32.mul
   i32.add
   local.set $7
@@ -10381,28 +9998,9 @@
      local.get $10
      i32.load16_u offset=2
      i32.store16 offset=2
-     block $~lib/util/hash/HASH<u16>|inlined.5 (result i32)
-      local.get $10
-      i32.load16_u
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 2
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 2
-      i32.const 2
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash16
-      br $~lib/util/hash/HASH<u16>|inlined.5
-     end
+     local.get $10
+     i32.load16_u
+     call $~lib/util/hash/HASH<u16>
      local.get $1
      i32.and
      local.set $12
@@ -10420,12 +10018,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/map/ENTRY_SIZE<u16,u16>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/map/ENTRY_SIZE<u16,u16>
     i32.add
     local.set $6
     br $while-continue|0
@@ -10485,40 +10083,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<u16>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $3
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u16,u16>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store16 offset=2
   else
@@ -10554,8 +10131,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -10564,14 +10141,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 8
+   call $~lib/map/ENTRY_SIZE<u16,u16>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store16
-   local.get $5
+   local.get $4
    local.get $2
    i32.store16 offset=2
    local.get $0
@@ -10582,7 +10159,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -10590,14 +10167,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=4
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -10614,32 +10191,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u16>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
   call $~lib/map/Map<u16,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -10649,8 +10205,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -10665,16 +10221,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -10694,7 +10250,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<u16,i32>#rehash
   end
   i32.const 1
@@ -11187,81 +10743,33 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<i32,i32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<i32>|inlined.2 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.2
-  end
+  local.get $1
+  local.get $1
+  call $~lib/util/hash/HASH<i32>
   call $~lib/map/Map<i32,i32>#find
   i32.const 0
   i32.ne
  )
  (func $~lib/map/Map<i32,i32>#get (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i32>
   call $~lib/map/Map<i32,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
  )
  (func $~lib/map/Map<i32,i32>#keys (param $0 i32) (result i32)
@@ -11296,7 +10804,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i32,i32>
     i32.mul
     i32.add
     local.set $7
@@ -11361,7 +10869,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<i32,i32>
     i32.mul
     i32.add
     local.set $7
@@ -11405,34 +10913,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i32>|inlined.4 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.4
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i32>
   call $~lib/map/Map<i32,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -11442,8 +10927,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -11458,16 +10943,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -11487,7 +10972,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<i32,i32>#rehash
   end
   i32.const 1
@@ -11955,9 +11440,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/map/ENTRY_ALIGN<u32,i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<u32,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u32,i32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<u32,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -11974,16 +11478,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u32,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -12027,6 +11535,29 @@
   call $~lib/map/Map<u32,i32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u32> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 4
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash32
+  return
+ )
  (func $~lib/map/Map<u32,i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -12076,34 +11607,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<u32,i32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
   call $~lib/map/Map<u32,i32>#find
   i32.const 0
   i32.ne
@@ -12139,7 +11646,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u32,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -12149,7 +11656,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u32,i32>
   i32.mul
   i32.add
   local.set $7
@@ -12180,32 +11687,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<u32>|inlined.2 (result i32)
-      local.get $10
-      i32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 4
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<u32>|inlined.2
-     end
+     local.get $10
+     i32.load
+     call $~lib/util/hash/HASH<u32>
      local.get $1
      i32.and
      local.set $12
@@ -12223,12 +11707,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<u32,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u32,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -12288,42 +11772,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<u32>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u32,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -12359,8 +11820,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -12369,14 +11830,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<u32,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -12387,7 +11848,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -12395,14 +11856,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=8
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -12410,47 +11871,23 @@
  )
  (func $~lib/map/Map<u32,i32>#get (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
   call $~lib/map/Map<u32,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
  )
  (func $~lib/map/Map<u32,i32>#get:size (param $0 i32) (result i32)
@@ -12630,7 +12067,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u32,i32>
     i32.mul
     i32.add
     local.set $7
@@ -12695,7 +12132,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u32,i32>
     i32.mul
     i32.add
     local.set $7
@@ -12728,9 +12165,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<u32,u32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<u32,u32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u32,u32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<u32,u32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -12747,16 +12203,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u32,u32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -12914,7 +12374,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u32,u32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -12924,7 +12384,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<u32,u32>
   i32.mul
   i32.add
   local.set $7
@@ -12955,32 +12415,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<u32>|inlined.5 (result i32)
-      local.get $10
-      i32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 4
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<u32>|inlined.5
-     end
+     local.get $10
+     i32.load
+     call $~lib/util/hash/HASH<u32>
      local.get $1
      i32.and
      local.set $12
@@ -12998,12 +12435,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<u32,u32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<u32,u32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -13063,42 +12500,19 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  block $~lib/util/hash/HASH<u32>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u32,u32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -13134,8 +12548,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -13144,14 +12558,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<u32,u32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -13162,7 +12576,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -13170,14 +12584,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=8
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -13194,34 +12608,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u32>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
   call $~lib/map/Map<u32,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -13231,8 +12622,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -13247,16 +12638,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -13276,7 +12667,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<u32,i32>#rehash
   end
   i32.const 1
@@ -13744,9 +13135,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/map/ENTRY_ALIGN<i64,i32> (result i32)
+  i32.const 7
+ )
+ (func $~lib/map/ENTRY_SIZE<i64,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<i64,i32>
+  local.set $0
+  i32.const 16
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<i64,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -13763,16 +13173,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<i64,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 64
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -13904,6 +13318,33 @@
   local.set $3
   local.get $3
  )
+ (func $~lib/util/hash/HASH<i64> (param $0 i64) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 8
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 8
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash64
+  return
+ )
  (func $~lib/map/Map<i64,i32>#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -13953,38 +13394,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<i64,i32>#has (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
   call $~lib/map/Map<i64,i32>#find
   i32.const 0
   i32.ne
@@ -14000,9 +13413,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -14021,7 +13433,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 16
+  call $~lib/map/ENTRY_SIZE<i64,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -14031,7 +13443,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 16
+  call $~lib/map/ENTRY_SIZE<i64,i32>
   i32.mul
   i32.add
   local.set $7
@@ -14062,59 +13474,32 @@
      local.get $10
      i32.load offset=8
      i32.store offset=8
-     block $~lib/util/hash/HASH<i64>|inlined.2 (result i32)
-      local.get $10
-      i64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 8
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<i64>|inlined.2
-     end
+     local.get $10
+     i64.load
+     call $~lib/util/hash/HASH<i64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=12
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 16
+     call $~lib/map/ENTRY_SIZE<i64,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<i64,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -14123,28 +13508,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -14170,51 +13555,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<i64,i32>#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
-  (local $3 i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<i64>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<i64,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=8
   else
@@ -14250,24 +13607,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 16
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<i64,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i64.store
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=8
    local.get $0
@@ -14278,74 +13635,46 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=12
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
   call $~lib/rt/pure/__retain
  )
  (func $~lib/map/Map<i64,i32>#get (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
-  (local $3 i32)
+  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
   call $~lib/map/Map<i64,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=8
  )
  (func $~lib/map/Map<i64,i32>#get:size (param $0 i32) (result i32)
@@ -14525,7 +13854,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<i64,i32>
     i32.mul
     i32.add
     local.set $7
@@ -14590,7 +13919,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<i64,i32>
     i32.mul
     i32.add
     local.set $7
@@ -14623,9 +13952,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<i64,i64> (result i32)
+  i32.const 7
+ )
+ (func $~lib/map/ENTRY_SIZE<i64,i64> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<i64,i64>
+  local.set $0
+  i32.const 20
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<i64,i64>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -14642,16 +13990,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<i64,i64>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 96
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -14789,9 +14141,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -14810,7 +14161,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 24
+  call $~lib/map/ENTRY_SIZE<i64,i64>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -14820,7 +14171,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 24
+  call $~lib/map/ENTRY_SIZE<i64,i64>
   i32.mul
   i32.add
   local.set $7
@@ -14851,59 +14202,32 @@
      local.get $10
      i64.load offset=8
      i64.store offset=8
-     block $~lib/util/hash/HASH<i64>|inlined.5 (result i32)
-      local.get $10
-      i64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 8
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<i64>|inlined.5
-     end
+     local.get $10
+     i64.load
+     call $~lib/util/hash/HASH<i64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=16
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 24
+     call $~lib/map/ENTRY_SIZE<i64,i64>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 24
+    call $~lib/map/ENTRY_SIZE<i64,i64>
     i32.add
     local.set $6
     br $while-continue|0
@@ -14912,28 +14236,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -14959,51 +14283,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<i64,i64>#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32)
-  (local $3 i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<i64>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<i64,i64>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i64.store offset=8
   else
@@ -15039,24 +14335,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 24
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<i64,i64>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i64.store
-   local.get $5
+   local.get $4
    local.get $2
    i64.store offset=8
    local.get $0
@@ -15067,22 +14363,22 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=16
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -15093,45 +14389,17 @@
   i32.load offset=20
  )
  (func $~lib/map/Map<i64,i32>#delete (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i64>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
   call $~lib/map/Map<i64,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -15141,8 +14409,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=12
   i32.const 1
   i32.or
@@ -15157,17 +14425,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -15186,7 +14454,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<i64,i32>#rehash
   end
   i32.const 1
@@ -15660,11 +14928,30 @@
   local.get $5
   call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/pure/__release
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/map/ENTRY_ALIGN<u64,i32> (result i32)
+  i32.const 7
+ )
+ (func $~lib/map/ENTRY_SIZE<u64,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u64,i32>
+  local.set $0
+  i32.const 16
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
  )
  (func $~lib/map/Map<u64,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -15681,16 +14968,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u64,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 64
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -15734,6 +15025,33 @@
   call $~lib/map/Map<u64,i32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u64> (param $0 i64) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 8
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 8
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash64
+  return
+ )
  (func $~lib/map/Map<u64,i32>#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -15783,38 +15101,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<u64,i32>#has (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
   call $~lib/map/Map<u64,i32>#find
   i32.const 0
   i32.ne
@@ -15830,9 +15120,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -15851,7 +15140,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 16
+  call $~lib/map/ENTRY_SIZE<u64,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -15861,7 +15150,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 16
+  call $~lib/map/ENTRY_SIZE<u64,i32>
   i32.mul
   i32.add
   local.set $7
@@ -15892,59 +15181,32 @@
      local.get $10
      i32.load offset=8
      i32.store offset=8
-     block $~lib/util/hash/HASH<u64>|inlined.2 (result i32)
-      local.get $10
-      i64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 8
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<u64>|inlined.2
-     end
+     local.get $10
+     i64.load
+     call $~lib/util/hash/HASH<u64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=12
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 16
+     call $~lib/map/ENTRY_SIZE<u64,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<u64,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -15953,28 +15215,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -16000,51 +15262,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<u64,i32>#set (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
-  (local $3 i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<u64>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u64,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=8
   else
@@ -16080,24 +15314,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 16
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<u64,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i64.store
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=8
    local.get $0
@@ -16108,74 +15342,46 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=12
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
   call $~lib/rt/pure/__retain
  )
  (func $~lib/map/Map<u64,i32>#get (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
-  (local $3 i32)
+  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
   call $~lib/map/Map<u64,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=8
  )
  (func $~lib/map/Map<u64,i32>#get:size (param $0 i32) (result i32)
@@ -16355,7 +15561,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<u64,i32>
     i32.mul
     i32.add
     local.set $7
@@ -16420,7 +15626,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<u64,i32>
     i32.mul
     i32.add
     local.set $7
@@ -16453,9 +15659,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<u64,u64> (result i32)
+  i32.const 7
+ )
+ (func $~lib/map/ENTRY_SIZE<u64,u64> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<u64,u64>
+  local.set $0
+  i32.const 20
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<u64,u64>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -16472,16 +15697,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<u64,u64>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 96
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -16619,9 +15848,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -16640,7 +15868,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 24
+  call $~lib/map/ENTRY_SIZE<u64,u64>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -16650,7 +15878,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 24
+  call $~lib/map/ENTRY_SIZE<u64,u64>
   i32.mul
   i32.add
   local.set $7
@@ -16681,59 +15909,32 @@
      local.get $10
      i64.load offset=8
      i64.store offset=8
-     block $~lib/util/hash/HASH<u64>|inlined.5 (result i32)
-      local.get $10
-      i64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 8
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<u64>|inlined.5
-     end
+     local.get $10
+     i64.load
+     call $~lib/util/hash/HASH<u64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=16
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 24
+     call $~lib/map/ENTRY_SIZE<u64,u64>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 24
+    call $~lib/map/ENTRY_SIZE<u64,u64>
     i32.add
     local.set $6
     br $while-continue|0
@@ -16742,28 +15943,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -16789,51 +15990,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<u64,u64>#set (param $0 i32) (param $1 i64) (param $2 i64) (result i32)
-  (local $3 i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<u64>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<u64,u64>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i64.store offset=8
   else
@@ -16869,24 +16042,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 24
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<u64,u64>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i64.store
-   local.get $5
+   local.get $4
    local.get $2
    i64.store offset=8
    local.get $0
@@ -16897,22 +16070,22 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=16
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -16923,45 +16096,17 @@
   i32.load offset=20
  )
  (func $~lib/map/Map<u64,i32>#delete (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u64>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
   call $~lib/map/Map<u64,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -16971,8 +16116,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=12
   i32.const 1
   i32.or
@@ -16987,17 +16132,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -17016,7 +16161,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<u64,i32>#rehash
   end
   i32.const 1
@@ -17492,9 +16637,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/map/ENTRY_ALIGN<f32,i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<f32,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<f32,i32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<f32,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -17511,16 +16675,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<f32,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -17564,6 +16732,22 @@
   call $~lib/map/Map<f32,i32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<f32> (param $0 f32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  i32.reinterpret_f32
+  call $~lib/util/hash/hash32
+  return
+ )
  (func $~lib/map/Map<f32,i32>#find (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -17613,27 +16797,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<f32,i32>#has (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
   call $~lib/map/Map<f32,i32>#find
   i32.const 0
   i32.ne
@@ -17649,9 +16816,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 f32)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -17670,7 +16836,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<f32,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -17680,7 +16846,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<f32,i32>
   i32.mul
   i32.add
   local.set $7
@@ -17711,48 +16877,32 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<f32>|inlined.2 (result i32)
-      local.get $10
-      f32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      i32.reinterpret_f32
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<f32>|inlined.2
-     end
+     local.get $10
+     f32.load
+     call $~lib/util/hash/HASH<f32>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=8
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<f32,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<f32,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -17761,28 +16911,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -17808,40 +16958,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<f32,i32>#set (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
-  (local $3 f32)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<f32>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $3
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<f32,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -17877,24 +17010,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 12
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<f32,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    f32.store
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -17905,63 +17038,46 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   i32.add
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=8
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
   call $~lib/rt/pure/__retain
  )
  (func $~lib/map/Map<f32,i32>#get (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
-  (local $3 i32)
+  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
   call $~lib/map/Map<f32,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
  )
  (func $~lib/map/Map<f32,i32>#get:size (param $0 i32) (result i32)
@@ -18141,7 +17257,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<f32,i32>
     i32.mul
     i32.add
     local.set $7
@@ -18206,7 +17322,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<f32,i32>
     i32.mul
     i32.add
     local.set $7
@@ -18239,9 +17355,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<f32,f32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<f32,f32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<f32,f32>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<f32,f32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -18258,16 +17393,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<f32,f32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -18405,9 +17544,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 f32)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -18426,7 +17564,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<f32,f32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -18436,7 +17574,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<f32,f32>
   i32.mul
   i32.add
   local.set $7
@@ -18467,48 +17605,32 @@
      local.get $10
      f32.load offset=4
      f32.store offset=4
-     block $~lib/util/hash/HASH<f32>|inlined.5 (result i32)
-      local.get $10
-      f32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      i32.reinterpret_f32
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<f32>|inlined.5
-     end
+     local.get $10
+     f32.load
+     call $~lib/util/hash/HASH<f32>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=8
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<f32,f32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<f32,f32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -18517,28 +17639,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -18564,40 +17686,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<f32,f32>#set (param $0 i32) (param $1 f32) (param $2 f32) (result i32)
-  (local $3 f32)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<f32>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $3
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<f32,f32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    f32.store offset=4
   else
@@ -18633,24 +17738,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 12
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<f32,f32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    f32.store
-   local.get $5
+   local.get $4
    local.get $2
    f32.store offset=4
    local.get $0
@@ -18661,22 +17766,22 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=8
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -18687,34 +17792,17 @@
   i32.load offset=20
  )
  (func $~lib/map/Map<f32,i32>#delete (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f32>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
   call $~lib/map/Map<f32,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -18724,8 +17812,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -18740,17 +17828,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -18769,7 +17857,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<f32,i32>#rehash
   end
   i32.const 1
@@ -19245,9 +18333,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/map/ENTRY_ALIGN<f64,i32> (result i32)
+  i32.const 7
+ )
+ (func $~lib/map/ENTRY_SIZE<f64,i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<f64,i32>
+  local.set $0
+  i32.const 16
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<f64,i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -19264,16 +18371,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<f64,i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 64
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -19317,6 +18428,26 @@
   call $~lib/map/Map<f64,i32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<f64> (param $0 f64) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 8
+  i32.eq
+  drop
+  local.get $0
+  i64.reinterpret_f64
+  call $~lib/util/hash/hash64
+  return
+ )
  (func $~lib/map/Map<f64,i32>#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -19366,31 +18497,10 @@
   i32.const 0
  )
  (func $~lib/map/Map<f64,i32>#has (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
   call $~lib/map/Map<f64,i32>#find
   i32.const 0
   i32.ne
@@ -19406,9 +18516,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 f64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -19427,7 +18536,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 16
+  call $~lib/map/ENTRY_SIZE<f64,i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -19437,7 +18546,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 16
+  call $~lib/map/ENTRY_SIZE<f64,i32>
   i32.mul
   i32.add
   local.set $7
@@ -19468,52 +18577,32 @@
      local.get $10
      i32.load offset=8
      i32.store offset=8
-     block $~lib/util/hash/HASH<f64>|inlined.2 (result i32)
-      local.get $10
-      f64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      i64.reinterpret_f64
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<f64>|inlined.2
-     end
+     local.get $10
+     f64.load
+     call $~lib/util/hash/HASH<f64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=12
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 16
+     call $~lib/map/ENTRY_SIZE<f64,i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<f64,i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -19522,28 +18611,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -19569,44 +18658,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<f64,i32>#set (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
-  (local $3 f64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<f64>|inlined.1 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.1
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<f64,i32>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=8
   else
@@ -19642,24 +18710,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 16
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<f64,i32>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    f64.store
-   local.get $5
+   local.get $4
    local.get $2
    i32.store offset=8
    local.get $0
@@ -19670,67 +18738,46 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=12
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
   call $~lib/rt/pure/__retain
  )
  (func $~lib/map/Map<f64,i32>#get (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
-  (local $3 i32)
+  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
   call $~lib/map/Map<f64,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 352
    i32.const 416
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=8
  )
  (func $~lib/map/Map<f64,i32>#get:size (param $0 i32) (result i32)
@@ -19910,7 +18957,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<f64,i32>
     i32.mul
     i32.add
     local.set $7
@@ -19975,7 +19022,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/map/ENTRY_SIZE<f64,i32>
     i32.mul
     i32.add
     local.set $7
@@ -20008,9 +19055,28 @@
   call $~lib/array/Array<i32>#set:length
   local.get $3
  )
+ (func $~lib/map/ENTRY_ALIGN<f64,f64> (result i32)
+  i32.const 7
+ )
+ (func $~lib/map/ENTRY_SIZE<f64,f64> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<f64,f64>
+  local.set $0
+  i32.const 20
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<f64,f64>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -20027,16 +19093,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<f64,f64>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 96
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -20174,9 +19244,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 f64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -20195,7 +19264,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 24
+  call $~lib/map/ENTRY_SIZE<f64,f64>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -20205,7 +19274,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 24
+  call $~lib/map/ENTRY_SIZE<f64,f64>
   i32.mul
   i32.add
   local.set $7
@@ -20236,52 +19305,32 @@
      local.get $10
      f64.load offset=8
      f64.store offset=8
-     block $~lib/util/hash/HASH<f64>|inlined.5 (result i32)
-      local.get $10
-      f64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      i64.reinterpret_f64
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<f64>|inlined.5
-     end
+     local.get $10
+     f64.load
+     call $~lib/util/hash/HASH<f64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=16
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 24
+     call $~lib/map/ENTRY_SIZE<f64,f64>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 24
+    call $~lib/map/ENTRY_SIZE<f64,f64>
     i32.add
     local.set $6
     br $while-continue|0
@@ -20290,28 +19339,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -20337,44 +19386,23 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/map/Map<f64,f64>#set (param $0 i32) (param $1 f64) (param $2 f64) (result i32)
-  (local $3 f64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/hash/HASH<f64>|inlined.4 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $3
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.4
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<f64,f64>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $5
+   local.get $4
    local.get $2
    f64.store offset=8
   else
@@ -20410,24 +19438,24 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/pure/__retain
-   local.set $6
-   local.get $6
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $7
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $7
-   i32.const 24
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<f64,f64>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    f64.store
-   local.get $5
+   local.get $4
    local.get $2
    f64.store offset=8
    local.get $0
@@ -20438,22 +19466,22 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $7
-   local.get $5
-   local.get $7
+   local.set $6
+   local.get $4
+   local.get $6
    i32.load
    i32.store offset=16
-   local.get $7
-   local.get $5
-   i32.store
    local.get $6
+   local.get $4
+   i32.store
+   local.get $5
    call $~lib/rt/pure/__release
   end
   local.get $0
@@ -20464,38 +19492,17 @@
   i32.load offset=20
  )
  (func $~lib/map/Map<f64,i32>#delete (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f64>|inlined.6 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.6
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
   call $~lib/map/Map<f64,i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -20505,8 +19512,8 @@
   drop
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=12
   i32.const 1
   i32.or
@@ -20521,17 +19528,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -20550,7 +19557,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/map/Map<f64,i32>#rehash
   end
   i32.const 1
diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat
index a73ceeae40..d38201c13b 100644
--- a/tests/compiler/std/math.optimized.wat
+++ b/tests/compiler/std/math.optimized.wat
@@ -1,31 +1,34 @@
 (module
  (type $f64_=>_f64 (func (param f64) (result f64)))
  (type $f64_f64_f64_=>_i32 (func (param f64 f64 f64) (result i32)))
- (type $f32_f32_f32_=>_i32 (func (param f32 f32 f32) (result i32)))
  (type $f32_=>_f32 (func (param f32) (result f32)))
  (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
- (type $f32_f32_=>_i32 (func (param f32 f32) (result i32)))
+ (type $f32_f32_f32_=>_i32 (func (param f32 f32 f32) (result i32)))
  (type $f64_f64_=>_i32 (func (param f64 f64) (result i32)))
  (type $f32_f32_=>_f32 (func (param f32 f32) (result f32)))
- (type $f32_f32_f32_f32_=>_i32 (func (param f32 f32 f32 f32) (result i32)))
- (type $f64_f64_f64_f64_=>_i32 (func (param f64 f64 f64 f64) (result i32)))
  (type $none_=>_none (func))
+ (type $f64_f64_f64_f64_=>_i32 (func (param f64 f64 f64 f64) (result i32)))
  (type $f32_i32_=>_f32 (func (param f32 i32) (result f32)))
+ (type $f64_=>_f32 (func (param f64) (result f32)))
  (type $none_=>_f64 (func (result f64)))
  (type $f64_i32_=>_f64 (func (param f64 i32) (result f64)))
+ (type $f64_f64_i32_=>_f64 (func (param f64 f64 i32) (result f64)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i64_=>_none (func (param i64)))
  (type $i64_i64_i64_i64_i64_=>_none (func (param i64 i64 i64 i64 i64)))
  (type $f64_=>_none (func (param f64)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
- (type $f32_i32_f32_=>_i32 (func (param f32 i32 f32) (result i32)))
+ (type $f32_i32_=>_i32 (func (param f32 i32) (result i32)))
+ (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32)))
+ (type $f32_f32_=>_i32 (func (param f32 f32) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
- (type $f64_i32_f64_=>_i32 (func (param f64 i32 f64) (result i32)))
+ (type $f64_i64_i32_=>_i32 (func (param f64 i64 i32) (result i32)))
  (type $i64_=>_i64 (func (param i64) (result i64)))
  (type $i64_i32_=>_i64 (func (param i64 i32) (result i64)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $f32_f32_f32_=>_f32 (func (param f32 f32 f32) (result f32)))
- (type $f64_f64_i32_=>_f64 (func (param f64 f64 i32) (result f64)))
+ (type $f64_i32_=>_f32 (func (param f64 i32) (result f32)))
  (type $f64_f64_f64_=>_f64 (func (param f64 f64 f64) (result f64)))
  (import "Math" "E" (global $~lib/bindings/Math/E f64))
  (import "Math" "LN2" (global $~lib/bindings/Math/LN2 f64))
@@ -191,8 +194,6 @@
    local.get $0
    f64.eq
    i32.and
-   i32.const 0
-   i32.ne
    local.get $1
    i64.reinterpret_f64
    i64.const 63
@@ -202,8 +203,6 @@
    local.get $1
    f64.eq
    i32.and
-   i32.const 0
-   i32.ne
    i32.eq
    if
     local.get $2
@@ -217,7 +216,7 @@
   f64.sub
   f64.const 0
   f64.ne
-  if (result f64)
+  if
    local.get $1
    f64.const 0.5
    f64.mul
@@ -225,12 +224,11 @@
    f64.const 8988465674311579538646525e283
    local.get $0
    f64.copysign
-  else
-   local.get $0
+   local.set $0
   end
+  local.get $0
   local.get $1
   f64.sub
-  i32.const 0
   local.get $1
   i64.reinterpret_f64
   i64.const 52
@@ -239,13 +237,15 @@
   i64.and
   i32.wrap_i64
   local.tee $3
-  if (result i32)
-   local.get $3
-  else
+  i32.eqz
+  if
    local.get $3
    i32.const 1
    i32.add
+   local.set $3
   end
+  i32.const 0
+  local.get $3
   i32.const -1075
   i32.add
   i32.sub
@@ -385,8 +385,6 @@
    local.get $0
    f32.eq
    i32.and
-   i32.const 0
-   i32.ne
    local.get $1
    i32.reinterpret_f32
    i32.const 31
@@ -395,8 +393,6 @@
    local.get $1
    f32.eq
    i32.and
-   i32.const 0
-   i32.ne
    i32.eq
    if
     local.get $2
@@ -410,7 +406,7 @@
   f32.sub
   f32.const 0
   f32.ne
-  if (result f32)
+  if
    local.get $1
    f32.const 0.5
    f32.mul
@@ -418,12 +414,11 @@
    f32.const 1701411834604692317316873e14
    local.get $0
    f32.copysign
-  else
-   local.get $0
+   local.set $0
   end
+  local.get $0
   local.get $1
   f32.sub
-  i32.const 0
   local.get $1
   i32.reinterpret_f32
   i32.const 23
@@ -431,13 +426,15 @@
   i32.const 255
   i32.and
   local.tee $3
-  if (result i32)
-   local.get $3
-  else
+  i32.eqz
+  if
    local.get $3
    i32.const 1
    i32.add
+   local.set $3
   end
+  i32.const 0
+  local.get $3
   i32.const -150
   i32.add
   i32.sub
@@ -475,22 +472,6 @@
   end
   i32.const 1
  )
- (func $std/math/test_scalbn (param $0 f64) (param $1 i32) (param $2 f64) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMath.scalbn
-  local.get $2
-  f64.const 0
-  call $std/math/check<f64>
- )
- (func $std/math/test_scalbnf (param $0 f32) (param $1 i32) (param $2 f32) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMathf.scalbn
-  local.get $2
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $std/math/test_abs (param $0 f64) (param $1 f64) (result i32)
   local.get $0
   f64.abs
@@ -507,13 +488,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_absf (param $0 f32) (param $1 f32) (result i32)
-  local.get $0
-  f32.abs
-  local.get $1
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $~lib/math/R (param $0 f64) (result f64)
   local.get $0
   f64.const 0.16666666666666666
@@ -832,13 +806,6 @@
   f32.add
   f32.mul
  )
- (func $std/math/test_acosf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.acos
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.log1p (param $0 f64) (result f64)
   (local $1 f64)
   (local $2 i32)
@@ -1862,13 +1829,6 @@
   local.get $1
   f32.copysign
  )
- (func $std/math/test_asinf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.asin
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $std/math/test_asinh (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   (local $3 f64)
   (local $4 i64)
@@ -2458,13 +2418,6 @@
   local.get $1
   f32.copysign
  )
- (func $std/math/test_atanf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.atan
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $std/math/test_atanh (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   (local $3 f64)
   (local $4 i64)
@@ -3006,14 +2959,6 @@
   i32.and
   select
  )
- (func $std/math/test_atan2f (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMathf.atan2
-  local.get $2
-  local.get $3
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.cbrt (param $0 f64) (result f64)
   (local $1 f64)
   (local $2 i32)
@@ -3250,13 +3195,6 @@
   f64.div
   f32.demote_f64
  )
- (func $std/math/test_cbrtf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.cbrt
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $std/math/test_ceil (param $0 f64) (param $1 f64) (result i32)
   local.get $0
   f64.ceil
@@ -3273,12 +3211,116 @@
    i32.const 0
   end
  )
- (func $std/math/test_ceilf (param $0 f32) (param $1 f32) (result i32)
+ (func $~lib/math/cos_kern (param $0 f64) (param $1 f64) (result f64)
+  (local $2 f64)
+  (local $3 f64)
+  (local $4 f64)
+  f64.const 1
+  f64.const 0.5
+  local.get $0
+  local.get $0
+  f64.mul
+  local.tee $2
+  f64.mul
+  local.tee $3
+  f64.sub
+  local.tee $4
+  f64.const 1
+  local.get $4
+  f64.sub
+  local.get $3
+  f64.sub
+  local.get $2
+  local.get $2
+  f64.const 0.0416666666666666
+  local.get $2
+  f64.const -0.001388888888887411
+  local.get $2
+  f64.const 2.480158728947673e-05
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  local.get $2
+  local.get $2
+  f64.mul
+  local.tee $3
+  local.get $3
+  f64.mul
+  f64.const -2.7557314351390663e-07
+  local.get $2
+  f64.const 2.087572321298175e-09
+  local.get $2
+  f64.const -1.1359647557788195e-11
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  local.get $0
+  local.get $1
+  f64.mul
+  f64.sub
+  f64.add
+  f64.add
+ )
+ (func $~lib/math/umuldi (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
   local.get $0
-  f32.ceil
+  i64.const 4294967295
+  i64.and
+  local.tee $2
   local.get $1
-  f32.const 0
-  call $std/math/check<f32>
+  i64.const 4294967295
+  i64.and
+  local.tee $3
+  i64.mul
+  local.set $4
+  local.get $2
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.tee $2
+  i64.mul
+  local.get $4
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.tee $3
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $0
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $3
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  global.set $~lib/math/res128_hi
+  local.get $4
+  i64.const 4294967295
+  i64.and
+  local.get $0
+  i64.const 32
+  i64.shl
+  i64.add
  )
  (func $~lib/math/pio2_large_quot (param $0 i64) (result i32)
   (local $1 i64)
@@ -3289,10 +3331,7 @@
   (local $6 i64)
   (local $7 i32)
   (local $8 i64)
-  (local $9 i64)
-  (local $10 i64)
-  (local $11 i64)
-  (local $12 f64)
+  (local $9 f64)
   local.get $0
   i64.const 9223372036854775807
   i64.and
@@ -3310,13 +3349,13 @@
   i32.add
   local.tee $7
   i64.load
-  local.set $6
+  local.set $4
   local.get $7
   i64.load offset=8
   local.set $3
   local.get $7
   i64.load offset=16
-  local.set $4
+  local.set $2
   local.get $1
   i64.const 63
   i64.and
@@ -3324,193 +3363,105 @@
   i64.const 0
   i64.ne
   if
-   local.get $6
+   local.get $4
    local.get $1
    i64.shl
    local.get $3
    i64.const 64
    local.get $1
    i64.sub
-   local.tee $2
+   local.tee $5
    i64.shr_u
    i64.or
-   local.set $6
+   local.set $4
    local.get $3
    local.get $1
    i64.shl
-   local.get $4
    local.get $2
+   local.get $5
    i64.shr_u
    i64.or
    local.set $3
-   local.get $4
+   local.get $2
    local.get $1
    i64.shl
    local.get $7
    i64.load offset=24
-   local.get $2
+   local.get $5
    i64.shr_u
    i64.or
-   local.set $4
+   local.set $2
   end
+  local.get $2
+  i64.const 32
+  i64.shr_u
   local.get $0
   i64.const 4503599627370495
   i64.and
   i64.const 4503599627370496
   i64.or
-  local.tee $1
-  i64.const 4294967295
-  i64.and
   local.tee $2
-  local.get $3
   i64.const 32
-  i64.shr_u
-  local.tee $8
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $5
-  local.get $2
+  i64.shr_s
   i64.mul
-  local.tee $9
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $3
-  local.get $5
-  local.get $1
-  i64.const 32
-  i64.shr_u
   local.tee $5
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $2
-  local.get $5
-  local.get $8
-  i64.mul
   local.get $3
-  i64.const 32
-  i64.shr_u
-  i64.add
   local.get $2
-  i64.const 32
-  i64.shr_u
+  call $~lib/math/umuldi
   i64.add
-  global.set $~lib/math/res128_hi
+  local.tee $1
+  local.get $5
+  i64.lt_u
+  i64.extend_i32_u
   global.get $~lib/math/res128_hi
-  local.get $1
-  local.get $6
-  i64.mul
-  i64.add
+  local.get $2
   local.get $4
-  i64.const 32
-  i64.shr_u
-  local.get $1
-  i64.const 32
-  i64.shr_s
   i64.mul
-  local.tee $3
-  local.get $9
-  i64.const 4294967295
-  i64.and
-  local.get $2
-  i64.const 32
-  i64.shl
-  i64.add
   i64.add
-  local.tee $1
-  local.get $3
-  i64.lt_u
-  i64.extend_i32_u
   i64.add
-  local.tee $8
+  local.tee $5
   i64.const 2
   i64.shl
   local.get $1
   i64.const 62
   i64.shr_u
   i64.or
-  local.tee $6
+  local.tee $4
   i64.const 63
   i64.shr_s
-  local.tee $4
+  local.tee $3
   i64.const 1
   i64.shr_s
-  local.get $6
+  local.get $4
   i64.xor
-  local.tee $2
+  local.tee $6
   i64.clz
-  local.set $3
+  local.set $2
+  i64.const -3958705157555305932
+  local.get $6
   local.get $2
-  local.get $3
   i64.shl
-  local.get $4
+  local.get $3
   local.get $1
   i64.const 2
   i64.shl
   i64.xor
-  local.tee $5
+  local.tee $1
   i64.const 64
-  local.get $3
+  local.get $2
   i64.sub
   i64.shr_u
   i64.or
-  local.tee $1
-  i64.const 4294967295
-  i64.and
-  local.set $2
-  local.get $1
-  i64.const 32
-  i64.shr_u
-  local.tee $9
-  i64.const 560513588
-  i64.mul
-  local.get $2
-  i64.const 3373259426
-  i64.mul
-  local.get $2
-  i64.const 560513588
-  i64.mul
-  local.tee $10
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $11
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $2
-  local.get $9
-  i64.const 3373259426
-  i64.mul
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.set $~lib/math/res128_hi
-  local.get $10
-  i64.const 4294967295
-  i64.and
-  local.get $2
-  i64.const 32
-  i64.shl
-  i64.add
-  local.tee $2
+  local.tee $6
+  call $~lib/math/umuldi
+  local.tee $8
   f64.const 3.753184150245214e-04
-  local.get $1
+  local.get $6
   f64.convert_i64_u
   f64.mul
   f64.const 3.834951969714103e-04
-  local.get $5
-  local.get $3
+  local.get $1
+  local.get $2
   i64.shl
   f64.convert_i64_u
   f64.mul
@@ -3520,7 +3471,7 @@
   i64.lt_u
   i64.extend_i32_u
   global.get $~lib/math/res128_hi
-  local.tee $5
+  local.tee $6
   i64.const 11
   i64.shr_u
   i64.add
@@ -3528,10 +3479,10 @@
   global.set $~lib/math/rempio2_y0
   f64.const 5.421010862427522e-20
   local.get $1
-  local.get $5
+  local.get $6
   i64.const 53
   i64.shl
-  local.get $2
+  local.get $8
   i64.const 11
   i64.shr_u
   i64.or
@@ -3541,156 +3492,99 @@
   global.set $~lib/math/rempio2_y1
   global.get $~lib/math/rempio2_y0
   i64.const 4372995238176751616
-  local.get $3
+  local.get $2
   i64.const 52
   i64.shl
   i64.sub
   local.get $0
-  local.get $6
+  local.get $4
   i64.xor
   i64.const -9223372036854775808
   i64.and
   i64.or
   f64.reinterpret_i64
-  local.tee $12
+  local.tee $9
   f64.mul
   global.set $~lib/math/rempio2_y0
   global.get $~lib/math/rempio2_y1
-  local.get $12
+  local.get $9
   f64.mul
   global.set $~lib/math/rempio2_y1
-  local.get $8
+  local.get $5
   i64.const 62
   i64.shr_s
-  local.get $4
+  local.get $3
   i64.sub
   i32.wrap_i64
  )
- (func $~lib/math/NativeMath.cos (param $0 f64) (result f64)
-  (local $1 f64)
-  (local $2 i64)
+ (func $~lib/math/rempio2 (param $0 f64) (param $1 i64) (param $2 i32) (result i32)
   (local $3 f64)
   (local $4 f64)
-  (local $5 i32)
+  (local $5 f64)
   (local $6 i32)
-  (local $7 f64)
-  local.get $0
-  i64.reinterpret_f64
-  local.tee $2
+  local.get $1
   i64.const 32
   i64.shr_u
   i32.wrap_i64
-  local.tee $5
-  i32.const 31
-  i32.shr_u
-  local.set $6
-  local.get $5
   i32.const 2147483647
   i32.and
-  local.tee $5
-  i32.const 1072243195
-  i32.le_u
+  local.tee $6
+  i32.const 1094263291
+  i32.lt_u
   if
-   local.get $5
-   i32.const 1044816030
-   i32.lt_u
-   if
-    f64.const 1
-    return
-   end
-   f64.const 1
-   f64.const 0.5
+   local.get $6
+   i32.const 20
+   i32.shr_u
+   local.tee $2
    local.get $0
    local.get $0
+   f64.const 0.6366197723675814
    f64.mul
-   local.tee $3
+   f64.nearest
+   local.tee $5
+   f64.const 1.5707963267341256
    f64.mul
-   local.tee $4
-   f64.sub
-   local.tee $1
-   f64.const 1
-   local.get $1
-   f64.sub
-   local.get $4
    f64.sub
-   local.get $3
-   local.get $3
-   f64.const 0.0416666666666666
-   local.get $3
-   f64.const -0.001388888888887411
-   local.get $3
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $3
-   local.get $3
+   local.tee $0
+   local.get $5
+   f64.const 6.077100506506192e-11
    f64.mul
    local.tee $4
-   local.get $4
-   f64.mul
-   f64.const -2.7557314351390663e-07
-   local.get $3
-   f64.const 2.087572321298175e-09
-   local.get $3
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $0
-   f64.const 0
-   f64.mul
-   f64.sub
-   f64.add
-   f64.add
-   return
-  end
-  local.get $5
-  i32.const 2146435072
-  i32.ge_u
-  if
-   local.get $0
-   local.get $0
    f64.sub
-   return
-  end
-  block $~lib/math/rempio2|inlined.0 (result i32)
-   local.get $2
+   local.tee $3
+   i64.reinterpret_f64
    i64.const 32
    i64.shr_u
    i32.wrap_i64
-   i32.const 2147483647
+   i32.const 20
+   i32.shr_u
+   i32.const 2047
    i32.and
-   local.tee $5
-   i32.const 1094263291
-   i32.lt_u
+   i32.sub
+   i32.const 16
+   i32.gt_u
    if
     local.get $5
-    i32.const 20
-    i32.shr_u
-    local.tee $6
+    f64.const 2.0222662487959506e-21
+    f64.mul
     local.get $0
     local.get $0
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.tee $3
-    f64.const 1.5707963267341256
+    local.get $5
+    f64.const 6.077100506303966e-11
     f64.mul
+    local.tee $4
     f64.sub
     local.tee $0
-    local.get $3
-    f64.const 6.077100506506192e-11
-    f64.mul
-    local.tee $4
     f64.sub
-    local.tee $1
+    local.get $4
+    f64.sub
+    f64.sub
+    local.set $4
+    local.get $2
+    local.get $0
+    local.get $4
+    f64.sub
+    local.tee $3
     i64.reinterpret_f64
     i64.const 32
     i64.shr_u
@@ -3700,16 +3594,16 @@
     i32.const 2047
     i32.and
     i32.sub
-    i32.const 16
+    i32.const 49
     i32.gt_u
     if
-     local.get $3
-     f64.const 2.0222662487959506e-21
+     local.get $5
+     f64.const 8.4784276603689e-32
      f64.mul
      local.get $0
      local.get $0
-     local.get $3
-     f64.const 6.077100506303966e-11
+     local.get $5
+     f64.const 2.0222662487111665e-21
      f64.mul
      local.tee $4
      f64.sub
@@ -3719,174 +3613,162 @@
      f64.sub
      f64.sub
      local.set $4
-     local.get $6
      local.get $0
      local.get $4
      f64.sub
-     local.tee $1
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $3
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $0
-      local.get $0
-      local.get $3
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.tee $4
-      f64.sub
-      local.tee $0
-      f64.sub
-      local.get $4
-      f64.sub
-      f64.sub
-      local.set $4
-      local.get $0
-      local.get $4
-      f64.sub
-      local.set $1
-     end
+     local.set $3
     end
-    local.get $1
-    global.set $~lib/math/rempio2_y0
-    local.get $0
-    local.get $1
-    f64.sub
-    local.get $4
-    f64.sub
-    global.set $~lib/math/rempio2_y1
-    local.get $3
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.0
    end
-   i32.const 0
-   local.get $2
-   call $~lib/math/pio2_large_quot
-   local.tee $5
-   i32.sub
-   local.get $5
-   local.get $6
-   select
-  end
-  local.set $6
-  global.get $~lib/math/rempio2_y0
-  local.set $3
-  global.get $~lib/math/rempio2_y1
-  local.set $4
-  local.get $6
-  i32.const 1
-  i32.and
-  if (result f64)
-   local.get $3
-   local.get $3
-   f64.mul
-   local.tee $0
-   local.get $3
-   f64.mul
-   local.set $1
    local.get $3
+   global.set $~lib/math/rempio2_y0
    local.get $0
-   f64.const 0.5
-   local.get $4
-   f64.mul
-   local.get $1
-   f64.const 0.00833333333332249
-   local.get $0
-   f64.const -1.984126982985795e-04
-   local.get $0
-   f64.const 2.7557313707070068e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $0
-   local.get $0
-   local.get $0
-   f64.mul
-   f64.mul
-   f64.const -2.5050760253406863e-08
-   local.get $0
-   f64.const 1.58969099521155e-10
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.sub
-   f64.mul
-   local.get $4
-   f64.sub
-   local.get $1
-   f64.const -0.16666666666666632
-   f64.mul
-   f64.sub
-   f64.sub
-  else
-   f64.const 1
-   f64.const 0.5
-   local.get $3
    local.get $3
-   f64.mul
-   local.tee $0
-   f64.mul
-   local.tee $1
    f64.sub
-   local.tee $7
-   f64.const 1
-   local.get $7
+   local.get $4
    f64.sub
+   global.set $~lib/math/rempio2_y1
+   local.get $5
+   i32.trunc_f64_s
+   return
+  end
+  i32.const 0
+  local.get $1
+  call $~lib/math/pio2_large_quot
+  local.tee $6
+  i32.sub
+  local.get $6
+  local.get $2
+  select
+ )
+ (func $~lib/math/sin_kern (param $0 f64) (param $1 f64) (param $2 i32) (result f64)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  f64.const 0.00833333333332249
+  local.get $0
+  local.get $0
+  f64.mul
+  local.tee $3
+  f64.const -1.984126982985795e-04
+  local.get $3
+  f64.const 2.7557313707070068e-06
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $3
+  local.get $3
+  local.get $3
+  f64.mul
+  f64.mul
+  f64.const -2.5050760253406863e-08
+  local.get $3
+  f64.const 1.58969099521155e-10
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $4
+  local.get $0
+  local.get $3
+  local.get $0
+  f64.mul
+  local.tee $5
+  f64.const -0.16666666666666632
+  local.get $3
+  local.get $4
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $0
+  local.get $3
+  f64.const 0.5
+  local.get $1
+  f64.mul
+  local.get $5
+  local.get $4
+  f64.mul
+  f64.sub
+  f64.mul
+  local.get $1
+  f64.sub
+  local.get $5
+  f64.const -0.16666666666666632
+  f64.mul
+  f64.sub
+  f64.sub
+  local.get $2
+  i32.eqz
+  select
+ )
+ (func $~lib/math/NativeMath.cos (param $0 f64) (result f64)
+  (local $1 i32)
+  (local $2 f64)
+  (local $3 i64)
+  (local $4 i32)
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $3
+  i64.const 32
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $1
+  i32.const 31
+  i32.shr_u
+  local.set $4
+  local.get $1
+  i32.const 2147483647
+  i32.and
+  local.tee $1
+  i32.const 1072243195
+  i32.le_u
+  if
    local.get $1
-   f64.sub
-   local.get $0
-   local.get $0
-   f64.const 0.0416666666666666
-   local.get $0
-   f64.const -0.001388888888887411
+   i32.const 1044816030
+   i32.lt_u
+   if
+    f64.const 1
+    return
+   end
    local.get $0
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
+   f64.const 0
+   call $~lib/math/cos_kern
+   return
+  end
+  local.get $1
+  i32.const 2146435072
+  i32.ge_u
+  if
    local.get $0
    local.get $0
-   f64.mul
-   local.tee $1
-   local.get $1
-   f64.mul
-   f64.const -2.7557314351390663e-07
+   f64.sub
+   return
+  end
+  local.get $0
+  local.get $3
+  local.get $4
+  call $~lib/math/rempio2
+  local.set $1
+  global.get $~lib/math/rempio2_y0
+  local.set $0
+  global.get $~lib/math/rempio2_y1
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.and
+  if (result f64)
    local.get $0
-   f64.const 2.087572321298175e-09
+   local.get $2
+   i32.const 1
+   call $~lib/math/sin_kern
+  else
    local.get $0
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $3
-   local.get $4
-   f64.mul
-   f64.sub
-   f64.add
-   f64.add
+   local.get $2
+   call $~lib/math/cos_kern
   end
   local.set $0
-  local.get $6
+  local.get $1
   i32.const 1
   i32.add
   i32.const 2
@@ -3914,278 +3796,264 @@
    i32.const 0
   end
  )
- (func $~lib/math/NativeMathf.cos (param $0 f32) (result f32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 f64)
-  (local $4 f64)
-  (local $5 i64)
+ (func $~lib/math/cos_kernf (param $0 f64) (result f32)
+  (local $1 f64)
+  local.get $0
+  local.get $0
+  f64.mul
+  local.tee $0
+  local.get $0
+  f64.mul
+  local.set $1
+  f64.const 1
+  local.get $0
+  f64.const -0.499999997251031
+  f64.mul
+  f64.add
+  local.get $1
+  f64.const 0.04166662332373906
+  f64.mul
+  f64.add
+  local.get $1
+  local.get $0
+  f64.mul
+  f64.const -0.001388676377460993
+  local.get $0
+  f64.const 2.439044879627741e-05
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f32.demote_f64
+ )
+ (func $~lib/math/pio2f_large_quot (param $0 f32) (param $1 i32) (result i32)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i32)
   (local $6 i64)
   (local $7 i64)
   (local $8 i64)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i64)
+  local.get $1
+  i32.const 23
+  i32.shr_s
+  i32.const 152
+  i32.sub
+  local.tee $5
+  i32.const 6
+  i32.shr_s
+  i32.const 3
+  i32.shl
+  i32.const 1256
+  i32.add
+  local.tee $4
+  i64.load
+  local.set $6
+  local.get $4
+  i64.load offset=8
+  local.set $3
+  local.get $5
+  i32.const 63
+  i32.and
+  i64.extend_i32_s
+  local.tee $2
+  i64.const 32
+  i64.gt_u
+  if (result i64)
+   local.get $3
+   local.get $2
+   i64.const 32
+   i64.sub
+   i64.shl
+   local.get $4
+   i64.load offset=16
+   i64.const 96
+   local.get $2
+   i64.sub
+   i64.shr_u
+   i64.or
+  else
+   local.get $3
+   i64.const 32
+   local.get $2
+   i64.sub
+   i64.shr_u
+  end
+  local.set $7
+  f64.const 8.515303950216386e-20
   local.get $0
-  i32.reinterpret_f32
-  local.tee $1
-  i32.const 31
-  i32.shr_u
-  local.set $10
+  f64.promote_f32
+  f64.copysign
   local.get $1
-  i32.const 2147483647
+  i32.const 8388607
   i32.and
+  i32.const 8388608
+  i32.or
+  i64.extend_i32_s
+  local.tee $8
+  local.get $6
+  local.get $2
+  i64.shl
+  local.get $3
+  i64.const 64
+  local.get $2
+  i64.sub
+  i64.shr_u
+  i64.or
+  i64.mul
+  local.get $7
+  local.get $8
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
   local.tee $2
-  i32.const 1061752794
-  i32.le_u
+  i64.const 2
+  i64.shl
+  local.tee $3
+  f64.convert_i64_s
+  f64.mul
+  global.set $~lib/math/rempio2f_y
+  local.get $2
+  i64.const 62
+  i64.shr_u
+  local.get $3
+  i64.const 63
+  i64.shr_u
+  i64.add
+  i32.wrap_i64
+ )
+ (func $~lib/math/rempio2f (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 f64)
+  local.get $1
+  i32.const 1305022427
+  i32.lt_u
   if
-   local.get $2
-   i32.const 964689920
-   i32.lt_u
-   if
-    f32.const 1
-    return
-   end
    local.get $0
    f64.promote_f32
-   local.tee $3
-   local.get $3
-   f64.mul
-   local.tee $4
-   local.get $4
+   local.get $0
+   f64.promote_f32
+   f64.const 0.6366197723675814
    f64.mul
-   local.set $3
-   f64.const 1
-   local.get $4
-   f64.const -0.499999997251031
+   f64.nearest
+   local.tee $3
+   f64.const 1.5707963109016418
    f64.mul
-   f64.add
+   f64.sub
    local.get $3
-   f64.const 0.04166662332373906
+   f64.const 1.5893254773528196e-08
    f64.mul
-   f64.add
+   f64.sub
+   global.set $~lib/math/rempio2f_y
    local.get $3
-   local.get $4
-   f64.mul
-   f64.const -0.001388676377460993
-   local.get $4
-   f64.const 2.439044879627741e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f32.demote_f64
+   i32.trunc_f64_s
    return
   end
+  i32.const 0
+  local.get $0
+  local.get $1
+  call $~lib/math/pio2f_large_quot
+  local.tee $1
+  i32.sub
+  local.get $1
   local.get $2
-  i32.const 2139095040
-  i32.ge_u
-  if
-   local.get $0
+  select
+ )
+ (func $~lib/math/sin_kernf (param $0 f64) (result f32)
+  (local $1 f64)
+  local.get $0
+  local.get $0
+  local.get $0
+  f64.mul
+  local.tee $1
+  local.get $0
+  f64.mul
+  local.tee $0
+  f64.const -0.16666666641626524
+  local.get $1
+  f64.const 0.008333329385889463
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $0
+  local.get $1
+  local.get $1
+  f64.mul
+  f64.mul
+  f64.const -1.9839334836096632e-04
+  local.get $1
+  f64.const 2.718311493989822e-06
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f32.demote_f64
+ )
+ (func $std/math/test_cosf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
+  (local $3 i32)
+  (local $4 f64)
+  (local $5 i32)
+  block $__inlined_func$~lib/math/NativeMathf.cos (result f32)
    local.get $0
-   f32.sub
-   return
-  end
-  block $~lib/math/rempio2f|inlined.0 (result i32)
-   local.get $2
-   i32.const 1305022427
-   i32.lt_u
+   i32.reinterpret_f32
+   local.tee $3
+   i32.const 31
+   i32.shr_u
+   local.set $5
+   local.get $3
+   i32.const 2147483647
+   i32.and
+   local.tee $3
+   i32.const 1061752794
+   i32.le_u
    if
+    f32.const 1
+    local.get $3
+    i32.const 964689920
+    i32.lt_u
+    br_if $__inlined_func$~lib/math/NativeMathf.cos
+    drop
     local.get $0
     f64.promote_f32
-    local.get $0
-    f64.promote_f32
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.tee $3
-    f64.const 1.5707963109016418
-    f64.mul
-    f64.sub
-    local.get $3
-    f64.const 1.5893254773528196e-08
-    f64.mul
-    f64.sub
-    global.set $~lib/math/rempio2f_y
-    local.get $3
-    i32.trunc_f64_s
-    br $~lib/math/rempio2f|inlined.0
+    call $~lib/math/cos_kernf
+    br $__inlined_func$~lib/math/NativeMathf.cos
    end
-   local.get $2
-   i32.const 23
-   i32.shr_s
-   i32.const 152
-   i32.sub
-   local.tee $1
-   i32.const 6
-   i32.shr_s
-   i32.const 3
-   i32.shl
-   i32.const 1256
-   i32.add
-   local.tee $9
-   i64.load
-   local.set $6
-   local.get $9
-   i64.load offset=8
-   local.set $7
-   local.get $1
-   i32.const 63
-   i32.and
-   i64.extend_i32_s
-   local.tee $5
-   i64.const 32
-   i64.gt_u
-   if (result i64)
-    local.get $7
-    local.get $5
-    i64.const 32
-    i64.sub
-    i64.shl
-    local.get $9
-    i64.load offset=16
-    i64.const 96
-    local.get $5
-    i64.sub
-    i64.shr_u
-    i64.or
-   else
-    local.get $7
-    i64.const 32
-    local.get $5
-    i64.sub
-    i64.shr_u
-   end
-   local.set $11
-   f64.const 8.515303950216386e-20
    local.get $0
-   f64.promote_f32
-   f64.copysign
-   local.get $2
-   i32.const 8388607
-   i32.and
-   i32.const 8388608
-   i32.or
-   i64.extend_i32_s
-   local.tee $8
-   local.get $6
-   local.get $5
-   i64.shl
-   local.get $7
-   i64.const 64
-   local.get $5
-   i64.sub
-   i64.shr_u
-   i64.or
-   i64.mul
-   local.get $8
-   local.get $11
-   i64.mul
-   i64.const 32
-   i64.shr_u
-   i64.add
-   local.tee $6
-   i64.const 2
-   i64.shl
-   local.tee $8
-   f64.convert_i64_s
-   f64.mul
-   global.set $~lib/math/rempio2f_y
-   i32.const 0
-   local.get $6
-   i64.const 62
-   i64.shr_u
-   local.get $8
-   i64.const 63
-   i64.shr_u
-   i64.add
-   i32.wrap_i64
-   local.tee $1
-   i32.sub
-   local.get $1
-   local.get $10
-   select
-  end
-  local.set $1
-  global.get $~lib/math/rempio2f_y
-  local.set $3
-  local.get $1
-  i32.const 1
-  i32.and
-  if (result f32)
-   local.get $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.tee $4
-   local.get $3
-   f64.mul
-   local.tee $3
-   f64.const -0.16666666641626524
-   local.get $4
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $4
-   local.get $4
-   f64.mul
-   f64.mul
-   f64.const -1.9839334836096632e-04
-   local.get $4
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f32.demote_f64
-  else
+   local.get $0
+   f32.sub
    local.get $3
+   i32.const 2139095040
+   i32.ge_u
+   br_if $__inlined_func$~lib/math/NativeMathf.cos
+   drop
+   local.get $0
    local.get $3
-   f64.mul
-   local.tee $4
-   local.get $4
-   f64.mul
+   local.get $5
+   call $~lib/math/rempio2f
    local.set $3
-   f64.const 1
-   local.get $4
-   f64.const -0.499999997251031
-   f64.mul
-   f64.add
-   local.get $3
-   f64.const 0.04166662332373906
-   f64.mul
-   f64.add
+   global.get $~lib/math/rempio2f_y
+   local.set $4
    local.get $3
-   local.get $4
-   f64.mul
-   f64.const -0.001388676377460993
-   local.get $4
-   f64.const 2.439044879627741e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f32.demote_f64
-  end
-  local.set $0
-  local.get $1
-  i32.const 1
-  i32.add
-  i32.const 2
-  i32.and
-  if
-   local.get $0
+   i32.const 1
+   i32.and
+   if (result f32)
+    local.get $4
+    call $~lib/math/sin_kernf
+   else
+    local.get $4
+    call $~lib/math/cos_kernf
+   end
+   local.tee $0
    f32.neg
-   local.set $0
+   local.get $0
+   local.get $3
+   i32.const 1
+   i32.add
+   i32.const 2
+   i32.and
+   select
   end
-  local.get $0
- )
- (func $std/math/test_cosf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.cos
   local.get $1
   local.get $2
   call $std/math/check<f32>
@@ -5070,68 +4938,64 @@
   end
   local.get $0
  )
- (func $std/math/test_coshf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  (local $3 i32)
-  block $__inlined_func$~lib/math/NativeMathf.cosh (result f32)
-   local.get $0
-   i32.reinterpret_f32
-   i32.const 2147483647
-   i32.and
-   local.tee $3
-   f32.reinterpret_i32
-   local.set $0
-   local.get $3
-   i32.const 1060205079
+ (func $~lib/math/NativeMathf.cosh (param $0 f32) (result f32)
+  (local $1 i32)
+  local.get $0
+  i32.reinterpret_f32
+  i32.const 2147483647
+  i32.and
+  local.tee $1
+  f32.reinterpret_i32
+  local.set $0
+  local.get $1
+  i32.const 1060205079
+  i32.lt_u
+  if
+   local.get $1
+   i32.const 964689920
    i32.lt_u
    if
     f32.const 1
-    local.get $3
-    i32.const 964689920
-    i32.lt_u
-    br_if $__inlined_func$~lib/math/NativeMathf.cosh
-    drop
-    f32.const 1
-    local.get $0
-    call $~lib/math/NativeMathf.expm1
-    local.tee $0
-    local.get $0
-    f32.mul
-    f32.const 2
-    f32.const 2
-    local.get $0
-    f32.mul
-    f32.add
-    f32.div
-    f32.add
-    br $__inlined_func$~lib/math/NativeMathf.cosh
-   end
-   local.get $3
-   i32.const 1118925335
-   i32.lt_u
-   if
-    f32.const 0.5
-    local.get $0
-    call $~lib/math/NativeMathf.exp
-    local.tee $0
-    f32.mul
-    f32.const 0.5
-    local.get $0
-    f32.div
-    f32.add
-    br $__inlined_func$~lib/math/NativeMathf.cosh
+    return
    end
+   f32.const 1
+   local.get $0
+   call $~lib/math/NativeMathf.expm1
+   local.tee $0
+   local.get $0
+   f32.mul
+   f32.const 2
+   f32.const 2
+   local.get $0
+   f32.mul
+   f32.add
+   f32.div
+   f32.add
+   return
+  end
+  local.get $1
+  i32.const 1118925335
+  i32.lt_u
+  if
+   f32.const 0.5
    local.get $0
-   f32.const 162.88958740234375
-   f32.sub
    call $~lib/math/NativeMathf.exp
-   f32.const 1661534994731144841129758e11
-   f32.mul
-   f32.const 1661534994731144841129758e11
+   local.tee $0
    f32.mul
+   f32.const 0.5
+   local.get $0
+   f32.div
+   f32.add
+   return
   end
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
+  local.get $0
+  f32.const 162.88958740234375
+  f32.sub
+  call $~lib/math/NativeMathf.exp
+  f32.const 1661534994731144841129758e11
+  f32.mul
+  f32.const 1661534994731144841129758e11
+  f32.mul
  )
  (func $std/math/test_exp (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
@@ -5149,13 +5013,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_expf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.exp
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $std/math/test_expm1 (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
   call $~lib/math/NativeMath.expm1
@@ -5172,14 +5029,7 @@
    i32.const 0
   end
  )
- (func $std/math/test_expm1f (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.expm1
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
- (func $~lib/math/NativeMath.exp2 (param $0 f64) (result f64)
+ (func $~lib/util/math/exp2_lut (param $0 f64) (result f64)
   (local $1 f64)
   (local $2 i64)
   (local $3 i32)
@@ -5187,209 +5037,207 @@
   (local $5 i64)
   (local $6 i32)
   (local $7 f64)
-  block $~lib/util/math/exp2_lut|inlined.0
-   local.get $0
-   i64.reinterpret_f64
-   local.tee $2
-   i64.const 52
-   i64.shr_u
-   i64.const 2047
-   i64.and
-   i32.wrap_i64
-   local.tee $3
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $2
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  i32.wrap_i64
+  local.tee $3
+  i32.const 969
+  i32.sub
+  i32.const 63
+  i32.ge_u
+  if
+   local.get $3
    i32.const 969
    i32.sub
-   i32.const 63
+   i32.const -2147483648
+   i32.ge_u
+   if
+    f64.const 1
+    return
+   end
+   local.get $3
+   i32.const 1033
    i32.ge_u
    if
+    local.get $2
+    i64.const -4503599627370496
+    i64.eq
+    if
+     f64.const 0
+     return
+    end
     local.get $3
-    i32.const 969
-    i32.sub
-    i32.const -2147483648
+    i32.const 2047
     i32.ge_u
     if
      f64.const 1
-     local.set $1
-     br $~lib/util/math/exp2_lut|inlined.0
+     local.get $0
+     f64.add
+     return
     end
-    local.get $3
-    i32.const 1033
-    i32.ge_u
+    local.get $2
+    i64.const 63
+    i64.shr_u
+    i64.eqz
     if
+     f64.const inf
+     return
+    else
      local.get $2
-     i64.const -4503599627370496
-     i64.eq
-     br_if $~lib/util/math/exp2_lut|inlined.0
-     local.get $3
-     i32.const 2047
-     i32.ge_u
-     if
-      f64.const 1
-      local.get $0
-      f64.add
-      local.set $1
-      br $~lib/util/math/exp2_lut|inlined.0
-     end
-     local.get $2
-     i64.const 63
-     i64.shr_u
-     i64.eqz
+     i64.const -4570929321408987136
+     i64.ge_u
      if
-      f64.const inf
-      local.set $1
-      br $~lib/util/math/exp2_lut|inlined.0
-     else
-      local.get $2
-      i64.const -4570929321408987136
-      i64.ge_u
-      br_if $~lib/util/math/exp2_lut|inlined.0
+      f64.const 0
+      return
      end
     end
-    i32.const 0
-    local.get $3
-    local.get $2
-    i64.const 1
-    i64.shl
-    i64.const -9143996093422370816
-    i64.gt_u
-    select
-    local.set $3
    end
-   local.get $0
-   f64.const 52776558133248
-   f64.add
-   local.tee $1
-   i64.reinterpret_f64
-   local.tee $5
-   i64.const 127
-   i64.and
+   i32.const 0
+   local.get $3
+   local.get $2
    i64.const 1
    i64.shl
-   i32.wrap_i64
-   i32.const 3
-   i32.shl
-   i32.const 1288
-   i32.add
-   local.tee $6
-   i64.load offset=8
-   local.get $5
-   i64.const 45
-   i64.shl
-   i64.add
-   local.set $2
-   local.get $0
-   local.get $1
-   f64.const 52776558133248
-   f64.sub
-   f64.sub
-   local.tee $0
-   local.get $0
-   f64.mul
-   local.set $1
-   local.get $6
-   i64.load
-   f64.reinterpret_i64
-   local.get $0
-   f64.const 0.6931471805599453
-   f64.mul
-   f64.add
-   local.get $1
-   f64.const 0.24022650695909065
-   local.get $0
-   f64.const 0.0555041086686087
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $1
-   local.get $1
-   f64.mul
-   f64.const 0.009618131975721055
-   local.get $0
-   f64.const 1.3332074570119598e-03
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.set $0
-   local.get $3
-   i32.eqz
-   if
-    block $~lib/util/math/specialcase2|inlined.0 (result f64)
-     local.get $5
-     i64.const 2147483648
-     i64.and
-     i64.eqz
-     if
-      f64.const 2
-      local.get $2
-      i64.const 4503599627370496
-      i64.sub
-      f64.reinterpret_i64
-      local.tee $1
-      local.get $0
-      f64.mul
-      local.get $1
-      f64.add
-      f64.mul
-      br $~lib/util/math/specialcase2|inlined.0
-     end
+   i64.const -9143996093422370816
+   i64.gt_u
+   select
+   local.set $3
+  end
+  local.get $0
+  f64.const 52776558133248
+  f64.add
+  local.tee $1
+  i64.reinterpret_f64
+  local.tee $5
+  i64.const 127
+  i64.and
+  i64.const 1
+  i64.shl
+  i32.wrap_i64
+  i32.const 3
+  i32.shl
+  i32.const 1288
+  i32.add
+  local.tee $6
+  i64.load offset=8
+  local.get $5
+  i64.const 45
+  i64.shl
+  i64.add
+  local.set $2
+  local.get $0
+  local.get $1
+  f64.const 52776558133248
+  f64.sub
+  f64.sub
+  local.tee $0
+  local.get $0
+  f64.mul
+  local.set $1
+  local.get $6
+  i64.load
+  f64.reinterpret_i64
+  local.get $0
+  f64.const 0.6931471805599453
+  f64.mul
+  f64.add
+  local.get $1
+  f64.const 0.24022650695909065
+  local.get $0
+  f64.const 0.0555041086686087
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $1
+  local.get $1
+  f64.mul
+  f64.const 0.009618131975721055
+  local.get $0
+  f64.const 1.3332074570119598e-03
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $1
+  local.get $3
+  i32.eqz
+  if
+   block $__inlined_func$~lib/util/math/specialcase2 (result f64)
+    local.get $5
+    i64.const 2147483648
+    i64.and
+    i64.eqz
+    if
+     f64.const 2
      local.get $2
-     i64.const 4602678819172646912
-     i64.add
+     i64.const 4503599627370496
+     i64.sub
      f64.reinterpret_i64
-     local.tee $4
+     local.tee $0
+     local.get $1
+     f64.mul
      local.get $0
+     f64.add
      f64.mul
-     local.get $4
+     br $__inlined_func$~lib/util/math/specialcase2
+    end
+    local.get $2
+    i64.const 4602678819172646912
+    i64.add
+    f64.reinterpret_i64
+    local.tee $4
+    local.get $1
+    f64.mul
+    local.get $4
+    f64.add
+    local.tee $0
+    f64.const 1
+    f64.lt
+    if
+     f64.const 1
+     local.get $0
      f64.add
-     local.tee $1
+     local.tee $7
      f64.const 1
-     f64.lt
-     if (result f64)
-      f64.const 1
-      local.get $1
-      f64.add
-      local.tee $7
-      f64.const 1
-      local.get $7
-      f64.sub
-      local.get $1
-      f64.add
-      local.get $4
-      local.get $1
-      f64.sub
-      local.get $4
-      local.get $0
-      f64.mul
-      f64.add
-      f64.add
-      f64.add
-      f64.const 1
-      f64.sub
-     else
-      local.get $1
-     end
-     f64.const 2.2250738585072014e-308
+     local.get $7
+     f64.sub
+     local.get $0
+     f64.add
+     local.get $4
+     local.get $0
+     f64.sub
+     local.get $4
+     local.get $1
      f64.mul
+     f64.add
+     f64.add
+     f64.add
+     f64.const 1
+     f64.sub
+     local.set $0
     end
-    local.set $1
-    br $~lib/util/math/exp2_lut|inlined.0
+    local.get $0
+    f64.const 2.2250738585072014e-308
+    f64.mul
    end
-   local.get $2
-   f64.reinterpret_i64
-   local.tee $1
-   local.get $0
-   f64.mul
-   local.get $1
-   f64.add
-   local.set $1
+   return
   end
+  local.get $2
+  f64.reinterpret_i64
+  local.tee $0
   local.get $1
+  f64.mul
+  local.get $0
+  f64.add
  )
  (func $std/math/test_exp2 (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
-  call $~lib/math/NativeMath.exp2
+  call $~lib/util/math/exp2_lut
   local.get $1
   local.get $2
   call $std/math/check<f64>
@@ -5404,108 +5252,100 @@
    i32.const 0
   end
  )
- (func $~lib/math/NativeMathf.exp2 (param $0 f32) (result f32)
+ (func $~lib/util/math/exp2f_lut (param $0 f32) (result f32)
   (local $1 f64)
-  (local $2 f32)
+  (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
+  (local $4 f64)
+  (local $5 i64)
   local.get $0
   f64.promote_f32
   local.set $1
-  block $~lib/util/math/exp2f_lut|inlined.0
-   local.get $0
-   i32.reinterpret_f32
-   local.tee $3
-   i32.const 20
-   i32.shr_u
-   i32.const 2047
-   i32.and
-   local.tee $4
-   i32.const 1072
+  local.get $0
+  i32.reinterpret_f32
+  local.tee $2
+  i32.const 20
+  i32.shr_u
+  i32.const 2047
+  i32.and
+  local.tee $3
+  i32.const 1072
+  i32.ge_u
+  if
+   local.get $2
+   i32.const -8388608
+   i32.eq
+   if
+    f32.const 0
+    return
+   end
+   local.get $3
+   i32.const 2040
    i32.ge_u
    if
-    local.get $3
-    i32.const -8388608
-    i32.eq
-    br_if $~lib/util/math/exp2f_lut|inlined.0
-    local.get $4
-    i32.const 2040
-    i32.ge_u
-    if
-     local.get $0
-     local.get $0
-     f32.add
-     local.set $2
-     br $~lib/util/math/exp2f_lut|inlined.0
-    end
     local.get $0
-    f32.const 0
-    f32.gt
-    if
-     local.get $0
-     f32.const 1701411834604692317316873e14
-     f32.mul
-     local.set $2
-     br $~lib/util/math/exp2f_lut|inlined.0
-    end
     local.get $0
-    f32.const -150
-    f32.le
-    br_if $~lib/util/math/exp2f_lut|inlined.0
+    f32.add
+    return
+   end
+   local.get $0
+   f32.const 0
+   f32.gt
+   if
+    local.get $0
+    f32.const 1701411834604692317316873e14
+    f32.mul
+    return
+   end
+   local.get $0
+   f32.const -150
+   f32.le
+   if
+    f32.const 0
+    return
    end
-   f64.const 0.6931471806916203
-   local.get $1
-   local.get $1
-   f64.const 211106232532992
-   f64.add
-   local.tee $5
-   f64.const 211106232532992
-   f64.sub
-   f64.sub
-   local.tee $1
-   f64.mul
-   f64.const 1
-   f64.add
-   f64.const 0.05550361559341535
-   local.get $1
-   f64.mul
-   f64.const 0.2402284522445722
-   f64.add
-   local.get $1
-   local.get $1
-   f64.mul
-   f64.mul
-   f64.add
-   local.get $5
-   i64.reinterpret_f64
-   local.tee $6
-   i32.wrap_i64
-   i32.const 31
-   i32.and
-   i32.const 3
-   i32.shl
-   i32.const 3336
-   i32.add
-   i64.load
-   local.get $6
-   i64.const 47
-   i64.shl
-   i64.add
-   f64.reinterpret_i64
-   f64.mul
-   f32.demote_f64
-   local.set $2
   end
-  local.get $2
- )
- (func $std/math/test_exp2f (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.exp2
+  f64.const 0.6931471806916203
   local.get $1
-  local.get $2
-  call $std/math/check<f32>
+  local.get $1
+  f64.const 211106232532992
+  f64.add
+  local.tee $4
+  f64.const 211106232532992
+  f64.sub
+  f64.sub
+  local.tee $1
+  f64.mul
+  f64.const 1
+  f64.add
+  f64.const 0.05550361559341535
+  local.get $1
+  f64.mul
+  f64.const 0.2402284522445722
+  f64.add
+  local.get $1
+  local.get $1
+  f64.mul
+  f64.mul
+  f64.add
+  local.get $4
+  i64.reinterpret_f64
+  local.tee $5
+  i32.wrap_i64
+  i32.const 31
+  i32.and
+  i32.const 3
+  i32.shl
+  i32.const 3336
+  i32.add
+  i64.load
+  local.get $5
+  i64.const 47
+  i64.shl
+  i64.add
+  f64.reinterpret_i64
+  f64.mul
+  f32.demote_f64
  )
  (func $std/math/test_floor (param $0 f64) (param $1 f64) (result i32)
   local.get $0
@@ -5523,13 +5363,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_floorf (param $0 f32) (param $1 f32) (result i32)
-  local.get $0
-  f32.floor
-  local.get $1
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.hypot (param $0 f64) (param $1 f64) (result f64)
   (local $2 i64)
   (local $3 i64)
@@ -5700,14 +5533,6 @@
   f64.sqrt
   f64.mul
  )
- (func $std/math/test_hypot (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMath.hypot
-  local.get $2
-  local.get $3
-  call $std/math/check<f64>
- )
  (func $~lib/math/NativeMathf.hypot (param $0 f32) (param $1 f32) (result f32)
   (local $2 i32)
   (local $3 i32)
@@ -5813,14 +5638,6 @@
   f32.sqrt
   f32.mul
  )
- (func $std/math/test_hypotf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMathf.hypot
-  local.get $2
-  local.get $3
-  call $std/math/check<f32>
- )
  (func $std/math/test_log (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
   call $~lib/math/NativeMath.log
@@ -5837,13 +5654,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_logf (param $0 f32) (param $1 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.log
-  local.get $1
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.log10 (param $0 f64) (result f64)
   (local $1 i32)
   (local $2 i64)
@@ -6222,13 +6032,6 @@
   f32.mul
   f32.add
  )
- (func $std/math/test_log10f (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.log10
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $std/math/test_log1p (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
   call $~lib/math/NativeMath.log1p
@@ -6245,13 +6048,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_log1pf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.log1p
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.log2 (param $0 f64) (result f64)
   (local $1 i32)
   (local $2 i64)
@@ -6614,13 +6410,6 @@
   f32.convert_i32_s
   f32.add
  )
- (func $std/math/test_log2f (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.log2
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $std/math/test_max (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
   local.get $1
@@ -6639,14 +6428,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_maxf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  local.get $1
-  f32.max
-  local.get $2
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $std/math/test_min (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
   local.get $1
@@ -6665,14 +6446,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_minf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  local.get $1
-  f32.min
-  local.get $2
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.mod (param $0 f64) (param $1 f64) (result f64)
   (local $2 i64)
   (local $3 i64)
@@ -7086,14 +6859,6 @@
   local.get $0
   f32.mul
  )
- (func $std/math/test_modf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMathf.mod
-  local.get $2
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
   (local $2 f64)
   (local $3 f64)
@@ -8060,13 +7825,13 @@
   (local $2 f64)
   (local $3 f64)
   (local $4 i32)
-  (local $5 f64)
+  (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 f32)
-  (local $10 i32)
-  (local $11 i64)
+  (local $7 i64)
+  (local $8 f32)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 f64)
   local.get $1
   f32.abs
   f32.const 2
@@ -8142,7 +7907,7 @@
   local.tee $4
   i32.const 2147483647
   i32.and
-  local.set $7
+  local.set $6
   local.get $4
   i32.const 31
   i32.shr_u
@@ -8161,28 +7926,28 @@
    local.get $1
    f32.const 0.5
    f32.mul
-   local.tee $9
+   local.tee $8
    f32.nearest
-   local.get $9
+   local.get $8
    f32.ne
    i32.const 31
    i32.shl
-   local.set $10
+   local.set $9
    local.get $0
    f32.neg
    local.set $0
   end
   local.get $1
-  i32.reinterpret_f32
-  local.set $6
-  local.get $7
+  i32.reinterpret_f32
+  local.set $5
+  local.get $6
   i32.const 1065353216
   i32.eq
   if (result i32)
    i32.const 2143289344
    i32.const 1065353216
    local.get $4
-   local.get $6
+   local.get $5
    i32.const 2147483647
    i32.and
    i32.const 2139095040
@@ -8190,15 +7955,15 @@
    i32.or
    select
   else
-   local.get $7
+   local.get $6
    if (result i32)
-    local.get $7
+    local.get $6
     i32.const 2139095040
     i32.eq
     if (result i32)
      i32.const 0
      i32.const 2139095040
-     local.get $6
+     local.get $5
      i32.const 31
      i32.shr_u
      select
@@ -8207,33 +7972,34 @@
      if (result i32)
       i32.const 2143289344
      else
-      local.get $0
-      f64.promote_f32
-      i64.reinterpret_f64
-      local.tee $11
-      i64.const 4604544271217802189
-      i64.sub
-      i64.const 52
-      i64.shr_s
-      local.set $8
-      local.get $11
-      local.get $8
-      i64.const 52
-      i64.shl
-      i64.sub
-      f64.reinterpret_i64
-      local.tee $2
-      f64.const 1
-      f64.sub
-      local.get $2
-      f64.const 1
-      f64.add
-      f64.div
-      local.tee $3
-      local.get $3
-      f64.mul
-      local.set $2
-      block $~lib/math/exp2f|inlined.0
+      block $__inlined_func$~lib/math/exp2f (result f64)
+       local.get $0
+       f64.promote_f32
+       i64.reinterpret_f64
+       local.tee $10
+       i64.const 4604544271217802189
+       i64.sub
+       i64.const 52
+       i64.shr_s
+       local.set $7
+       local.get $10
+       local.get $7
+       i64.const 52
+       i64.shl
+       i64.sub
+       f64.reinterpret_i64
+       local.tee $2
+       f64.const 1
+       f64.sub
+       local.get $2
+       f64.const 1
+       f64.add
+       f64.div
+       local.tee $3
+       local.get $3
+       f64.mul
+       local.set $2
+       f64.const 0
        local.get $1
        f64.promote_f32
        f64.const 2.8853900817779268
@@ -8259,26 +8025,25 @@
        f64.mul
        f64.add
        f64.mul
-       local.get $8
+       local.get $7
        f64.convert_i64_s
        f64.add
        f64.mul
        local.tee $2
        f64.const -1022
        f64.lt
-       br_if $~lib/math/exp2f|inlined.0
+       br_if $__inlined_func$~lib/math/exp2f
+       drop
+       f64.const inf
        local.get $2
        f64.const 1024
        f64.ge
-       if
-        f64.const inf
-        local.set $5
-        br $~lib/math/exp2f|inlined.0
-       end
+       br_if $__inlined_func$~lib/math/exp2f
+       drop
        local.get $2
        local.get $2
        f64.nearest
-       local.tee $5
+       local.tee $11
        f64.sub
        local.tee $2
        local.get $2
@@ -8312,15 +8077,13 @@
        f64.mul
        f64.add
        i64.reinterpret_f64
-       local.get $5
+       local.get $11
        i64.trunc_f64_s
        i64.const 52
        i64.shl
        i64.add
        f64.reinterpret_i64
-       local.set $5
       end
-      local.get $5
       f32.demote_f64
       i32.reinterpret_f32
      end
@@ -8328,24 +8091,16 @@
    else
     i32.const 2139095040
     i32.const 0
-    local.get $6
+    local.get $5
     i32.const 31
     i32.shr_u
     select
    end
   end
-  local.get $10
+  local.get $9
   i32.or
   f32.reinterpret_i32
  )
- (func $std/math/test_powf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMathf.pow
-  local.get $2
-  local.get $3
-  call $std/math/check<f32>
- )
  (func $~lib/math/murmurHash3 (param $0 i64) (result i64)
   local.get $0
   local.get $0
@@ -8438,34 +8193,12 @@
   if
    i32.const 0
    i32.const 3616
-   i32.const 1404
+   i32.const 1381
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
  )
- (func $std/math/test_round (param $0 f64) (param $1 f64) (result i32)
-  local.get $0
-  f64.const 0.5
-  f64.add
-  f64.floor
-  local.get $0
-  f64.copysign
-  local.get $1
-  f64.const 0
-  call $std/math/check<f64>
- )
- (func $std/math/test_roundf (param $0 f32) (param $1 f32) (result i32)
-  local.get $0
-  f32.const 0.5
-  f32.add
-  f32.floor
-  local.get $0
-  f32.copysign
-  local.get $1
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $std/math/test_sign (param $0 f64) (param $1 f64) (result i32)
   f64.const 1
   local.get $0
@@ -8752,14 +8485,6 @@
   end
   local.get $0
  )
- (func $std/math/test_rem (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMath.rem
-  local.get $2
-  f64.const 0
-  call $std/math/check<f64>
- )
  (func $~lib/math/NativeMathf.rem (param $0 f32) (param $1 f32) (result f32)
   (local $2 i32)
   (local $3 i32)
@@ -9003,40 +8728,29 @@
   end
   local.get $0
  )
- (func $std/math/test_remf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  local.get $1
-  call $~lib/math/NativeMathf.rem
-  local.get $2
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.sin (param $0 f64) (result f64)
-  (local $1 f64)
-  (local $2 i64)
-  (local $3 f64)
-  (local $4 f64)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 f64)
+  (local $1 i32)
+  (local $2 f64)
+  (local $3 i64)
+  (local $4 i32)
   local.get $0
   i64.reinterpret_f64
-  local.tee $2
+  local.tee $3
   i64.const 32
   i64.shr_u
   i32.wrap_i64
-  local.tee $5
+  local.tee $1
   i32.const 31
   i32.shr_u
-  local.set $6
-  local.get $5
+  local.set $4
+  local.get $1
   i32.const 2147483647
   i32.and
-  local.tee $5
+  local.tee $1
   i32.const 1072243195
   i32.le_u
   if
-   local.get $5
+   local.get $1
    i32.const 1045430272
    i32.lt_u
    if
@@ -9044,560 +8758,41 @@
     return
    end
    local.get $0
-   local.get $0
-   local.get $0
-   f64.mul
-   local.tee $3
-   local.get $0
-   f64.mul
-   f64.const -0.16666666666666632
-   local.get $3
-   f64.const 0.00833333333332249
-   local.get $3
-   f64.const -1.984126982985795e-04
-   local.get $3
-   f64.const 2.7557313707070068e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $3
-   local.get $3
-   f64.mul
-   f64.mul
-   f64.const -2.5050760253406863e-08
-   local.get $3
-   f64.const 1.58969099521155e-10
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
+   f64.const 0
+   i32.const 0
+   call $~lib/math/sin_kern
    return
   end
-  local.get $5
+  local.get $1
   i32.const 2146435072
   i32.ge_u
   if
    local.get $0
    local.get $0
    f64.sub
-   return
-  end
-  block $~lib/math/rempio2|inlined.1 (result i32)
-   local.get $2
-   i64.const 32
-   i64.shr_u
-   i32.wrap_i64
-   i32.const 2147483647
-   i32.and
-   local.tee $5
-   i32.const 1094263291
-   i32.lt_u
-   if
-    local.get $5
-    i32.const 20
-    i32.shr_u
-    local.tee $6
-    local.get $0
-    local.get $0
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.tee $3
-    f64.const 1.5707963267341256
-    f64.mul
-    f64.sub
-    local.tee $0
-    local.get $3
-    f64.const 6.077100506506192e-11
-    f64.mul
-    local.tee $4
-    f64.sub
-    local.tee $1
-    i64.reinterpret_f64
-    i64.const 32
-    i64.shr_u
-    i32.wrap_i64
-    i32.const 20
-    i32.shr_u
-    i32.const 2047
-    i32.and
-    i32.sub
-    i32.const 16
-    i32.gt_u
-    if
-     local.get $3
-     f64.const 2.0222662487959506e-21
-     f64.mul
-     local.get $0
-     local.get $0
-     local.get $3
-     f64.const 6.077100506303966e-11
-     f64.mul
-     local.tee $4
-     f64.sub
-     local.tee $0
-     f64.sub
-     local.get $4
-     f64.sub
-     f64.sub
-     local.set $4
-     local.get $6
-     local.get $0
-     local.get $4
-     f64.sub
-     local.tee $1
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $3
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $0
-      local.get $0
-      local.get $3
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.tee $4
-      f64.sub
-      local.tee $0
-      f64.sub
-      local.get $4
-      f64.sub
-      f64.sub
-      local.set $4
-      local.get $0
-      local.get $4
-      f64.sub
-      local.set $1
-     end
-    end
-    local.get $1
-    global.set $~lib/math/rempio2_y0
-    local.get $0
-    local.get $1
-    f64.sub
-    local.get $4
-    f64.sub
-    global.set $~lib/math/rempio2_y1
-    local.get $3
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.1
-   end
-   i32.const 0
-   local.get $2
-   call $~lib/math/pio2_large_quot
-   local.tee $5
-   i32.sub
-   local.get $5
-   local.get $6
-   select
-  end
-  local.set $6
-  global.get $~lib/math/rempio2_y0
-  local.set $3
-  global.get $~lib/math/rempio2_y1
-  local.set $4
-  local.get $6
-  i32.const 1
-  i32.and
-  if (result f64)
-   f64.const 1
-   f64.const 0.5
-   local.get $3
-   local.get $3
-   f64.mul
-   local.tee $0
-   f64.mul
-   local.tee $1
-   f64.sub
-   local.tee $7
-   f64.const 1
-   local.get $7
-   f64.sub
-   local.get $1
-   f64.sub
-   local.get $0
-   local.get $0
-   f64.const 0.0416666666666666
-   local.get $0
-   f64.const -0.001388888888887411
-   local.get $0
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $0
-   local.get $0
-   f64.mul
-   local.tee $1
-   local.get $1
-   f64.mul
-   f64.const -2.7557314351390663e-07
-   local.get $0
-   f64.const 2.087572321298175e-09
-   local.get $0
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $3
-   local.get $4
-   f64.mul
-   f64.sub
-   f64.add
-   f64.add
-  else
-   local.get $3
-   local.get $3
-   f64.mul
-   local.tee $0
-   local.get $3
-   f64.mul
-   local.set $1
-   local.get $3
-   local.get $0
-   f64.const 0.5
-   local.get $4
-   f64.mul
-   local.get $1
-   f64.const 0.00833333333332249
-   local.get $0
-   f64.const -1.984126982985795e-04
-   local.get $0
-   f64.const 2.7557313707070068e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $0
-   local.get $0
-   local.get $0
-   f64.mul
-   f64.mul
-   f64.const -2.5050760253406863e-08
-   local.get $0
-   f64.const 1.58969099521155e-10
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.sub
-   f64.mul
-   local.get $4
-   f64.sub
-   local.get $1
-   f64.const -0.16666666666666632
-   f64.mul
-   f64.sub
-   f64.sub
-  end
-  local.set $0
-  local.get $6
-  i32.const 2
-  i32.and
-  if
-   local.get $0
-   f64.neg
-   local.set $0
-  end
-  local.get $0
- )
- (func $std/math/test_sin (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
-  local.get $0
-  call $~lib/math/NativeMath.sin
-  local.get $1
-  local.get $2
-  call $std/math/check<f64>
-  if (result i32)
-   local.get $0
-   call $~lib/bindings/Math/sin
-   local.get $1
-   local.get $2
-   call $std/math/check<f64>
-  else
-   i32.const 0
-  end
- )
- (func $~lib/math/NativeMathf.sin (param $0 f32) (result f32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 f64)
-  (local $4 f64)
-  (local $5 i64)
-  (local $6 f64)
-  (local $7 i64)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i64)
-  local.get $0
-  i32.reinterpret_f32
-  local.tee $1
-  i32.const 31
-  i32.shr_u
-  local.set $11
-  local.get $1
-  i32.const 2147483647
-  i32.and
-  local.tee $2
-  i32.const 1061752794
-  i32.le_u
-  if
-   local.get $2
-   i32.const 964689920
-   i32.lt_u
-   if
-    local.get $0
-    return
-   end
-   local.get $0
-   f64.promote_f32
-   local.tee $4
-   local.get $4
-   f64.mul
-   local.tee $6
-   local.get $4
-   f64.mul
-   local.set $3
-   local.get $4
-   local.get $3
-   f64.const -0.16666666641626524
-   local.get $6
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $6
-   local.get $6
-   f64.mul
-   f64.mul
-   f64.const -1.9839334836096632e-04
-   local.get $6
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f32.demote_f64
-   return
-  end
-  local.get $2
-  i32.const 2139095040
-  i32.ge_u
-  if
-   local.get $0
-   local.get $0
-   f32.sub
-   return
-  end
-  block $~lib/math/rempio2f|inlined.1 (result i32)
-   local.get $2
-   i32.const 1305022427
-   i32.lt_u
-   if
-    local.get $0
-    f64.promote_f32
-    local.get $0
-    f64.promote_f32
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.tee $3
-    f64.const 1.5707963109016418
-    f64.mul
-    f64.sub
-    local.get $3
-    f64.const 1.5893254773528196e-08
-    f64.mul
-    f64.sub
-    global.set $~lib/math/rempio2f_y
-    local.get $3
-    i32.trunc_f64_s
-    br $~lib/math/rempio2f|inlined.1
-   end
-   local.get $2
-   i32.const 23
-   i32.shr_s
-   i32.const 152
-   i32.sub
-   local.tee $1
-   i32.const 6
-   i32.shr_s
-   i32.const 3
-   i32.shl
-   i32.const 1256
-   i32.add
-   local.tee $10
-   i64.load
-   local.set $7
-   local.get $10
-   i64.load offset=8
-   local.set $8
-   local.get $1
-   i32.const 63
-   i32.and
-   i64.extend_i32_s
-   local.tee $5
-   i64.const 32
-   i64.gt_u
-   if (result i64)
-    local.get $8
-    local.get $5
-    i64.const 32
-    i64.sub
-    i64.shl
-    local.get $10
-    i64.load offset=16
-    i64.const 96
-    local.get $5
-    i64.sub
-    i64.shr_u
-    i64.or
-   else
-    local.get $8
-    i64.const 32
-    local.get $5
-    i64.sub
-    i64.shr_u
-   end
-   local.set $12
-   f64.const 8.515303950216386e-20
-   local.get $0
-   f64.promote_f32
-   f64.copysign
-   local.get $2
-   i32.const 8388607
-   i32.and
-   i32.const 8388608
-   i32.or
-   i64.extend_i32_s
-   local.tee $9
-   local.get $7
-   local.get $5
-   i64.shl
-   local.get $8
-   i64.const 64
-   local.get $5
-   i64.sub
-   i64.shr_u
-   i64.or
-   i64.mul
-   local.get $9
-   local.get $12
-   i64.mul
-   i64.const 32
-   i64.shr_u
-   i64.add
-   local.tee $7
-   i64.const 2
-   i64.shl
-   local.tee $9
-   f64.convert_i64_s
-   f64.mul
-   global.set $~lib/math/rempio2f_y
-   i32.const 0
-   local.get $7
-   i64.const 62
-   i64.shr_u
-   local.get $9
-   i64.const 63
-   i64.shr_u
-   i64.add
-   i32.wrap_i64
-   local.tee $1
-   i32.sub
-   local.get $1
-   local.get $11
-   select
+   return
   end
+  local.get $0
+  local.get $3
+  local.get $4
+  call $~lib/math/rempio2
   local.set $1
-  global.get $~lib/math/rempio2f_y
-  local.set $3
+  global.get $~lib/math/rempio2_y0
+  local.set $0
+  global.get $~lib/math/rempio2_y1
+  local.set $2
   local.get $1
   i32.const 1
   i32.and
-  if (result f32)
-   local.get $3
-   local.get $3
-   f64.mul
-   local.tee $4
-   local.get $4
-   f64.mul
-   local.set $3
-   f64.const 1
-   local.get $4
-   f64.const -0.499999997251031
-   f64.mul
-   f64.add
-   local.get $3
-   f64.const 0.04166662332373906
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $4
-   f64.mul
-   f64.const -0.001388676377460993
-   local.get $4
-   f64.const 2.439044879627741e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f32.demote_f64
+  if (result f64)
+   local.get $0
+   local.get $2
+   call $~lib/math/cos_kern
   else
-   local.get $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.tee $4
-   local.get $3
-   f64.mul
-   local.tee $3
-   f64.const -0.16666666641626524
-   local.get $4
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $4
-   local.get $4
-   f64.mul
-   f64.mul
-   f64.const -1.9839334836096632e-04
-   local.get $4
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f32.demote_f64
+   local.get $0
+   local.get $2
+   i32.const 1
+   call $~lib/math/sin_kern
   end
   local.set $0
   local.get $1
@@ -9605,14 +8800,92 @@
   i32.and
   if
    local.get $0
-   f32.neg
+   f64.neg
    local.set $0
   end
   local.get $0
  )
+ (func $std/math/test_sin (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.sin
+  local.get $1
+  local.get $2
+  call $std/math/check<f64>
+  if (result i32)
+   local.get $0
+   call $~lib/bindings/Math/sin
+   local.get $1
+   local.get $2
+   call $std/math/check<f64>
+  else
+   i32.const 0
+  end
+ )
  (func $std/math/test_sinf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
+  (local $3 i32)
+  (local $4 f64)
+  (local $5 i32)
+  local.get $0
+  i32.reinterpret_f32
+  local.tee $3
+  i32.const 31
+  i32.shr_u
+  local.set $5
+  block $__inlined_func$~lib/math/NativeMathf.sin
+   local.get $3
+   i32.const 2147483647
+   i32.and
+   local.tee $3
+   i32.const 1061752794
+   i32.le_u
+   if
+    local.get $3
+    i32.const 964689920
+    i32.lt_u
+    br_if $__inlined_func$~lib/math/NativeMathf.sin
+    local.get $0
+    f64.promote_f32
+    call $~lib/math/sin_kernf
+    local.set $0
+    br $__inlined_func$~lib/math/NativeMathf.sin
+   end
+   local.get $3
+   i32.const 2139095040
+   i32.ge_u
+   if
+    local.get $0
+    local.get $0
+    f32.sub
+    local.set $0
+    br $__inlined_func$~lib/math/NativeMathf.sin
+   end
+   local.get $0
+   local.get $3
+   local.get $5
+   call $~lib/math/rempio2f
+   local.set $3
+   global.get $~lib/math/rempio2f_y
+   local.set $4
+   local.get $3
+   i32.const 1
+   i32.and
+   if (result f32)
+    local.get $4
+    call $~lib/math/cos_kernf
+   else
+    local.get $4
+    call $~lib/math/sin_kernf
+   end
+   local.tee $0
+   f32.neg
+   local.get $0
+   local.get $3
+   i32.const 2
+   i32.and
+   select
+   local.set $0
+  end
   local.get $0
-  call $~lib/math/NativeMathf.sin
   local.get $1
   local.get $2
   call $std/math/check<f32>
@@ -9782,13 +9055,6 @@
   f32.mul
   f32.mul
  )
- (func $std/math/test_sinhf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMathf.sinh
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $std/math/test_sqrt (param $0 f64) (param $1 f64) (param $2 f64) (result i32)
   local.get $0
   f64.sqrt
@@ -9805,13 +9071,6 @@
    i32.const 0
   end
  )
- (func $std/math/test_sqrtf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
-  local.get $0
-  f32.sqrt
-  local.get $1
-  local.get $2
-  call $std/math/check<f32>
- )
  (func $~lib/math/tan_kern (param $0 f64) (param $1 f64) (param $2 i32) (result f64)
   (local $3 f64)
   (local $4 f64)
@@ -9992,30 +9251,27 @@
   f64.add
  )
  (func $~lib/math/NativeMath.tan (param $0 f64) (result f64)
-  (local $1 f64)
+  (local $1 i32)
   (local $2 i64)
-  (local $3 f64)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i32)
+  (local $3 i32)
   local.get $0
   i64.reinterpret_f64
   local.tee $2
   i64.const 32
   i64.shr_u
   i32.wrap_i64
-  local.tee $4
+  local.tee $1
   i32.const 31
   i32.shr_u
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 2147483647
   i32.and
-  local.tee $4
+  local.tee $1
   i32.const 1072243195
   i32.le_s
   if
-   local.get $4
+   local.get $1
    i32.const 1044381696
    i32.lt_s
    if
@@ -10028,7 +9284,7 @@
    call $~lib/math/tan_kern
    return
   end
-  local.get $4
+  local.get $1
   i32.const 2146435072
   i32.ge_s
   if
@@ -10037,130 +9293,15 @@
    f64.sub
    return
   end
-  block $~lib/math/rempio2|inlined.2 (result i32)
-   local.get $2
-   i64.const 32
-   i64.shr_u
-   i32.wrap_i64
-   i32.const 2147483647
-   i32.and
-   local.tee $4
-   i32.const 1094263291
-   i32.lt_u
-   if
-    local.get $4
-    i32.const 20
-    i32.shr_u
-    local.tee $6
-    local.get $0
-    local.get $0
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.tee $5
-    f64.const 1.5707963267341256
-    f64.mul
-    f64.sub
-    local.tee $0
-    local.get $5
-    f64.const 6.077100506506192e-11
-    f64.mul
-    local.tee $3
-    f64.sub
-    local.tee $1
-    i64.reinterpret_f64
-    i64.const 32
-    i64.shr_u
-    i32.wrap_i64
-    i32.const 20
-    i32.shr_u
-    i32.const 2047
-    i32.and
-    i32.sub
-    i32.const 16
-    i32.gt_u
-    if
-     local.get $5
-     f64.const 2.0222662487959506e-21
-     f64.mul
-     local.get $0
-     local.get $0
-     local.get $5
-     f64.const 6.077100506303966e-11
-     f64.mul
-     local.tee $3
-     f64.sub
-     local.tee $0
-     f64.sub
-     local.get $3
-     f64.sub
-     f64.sub
-     local.set $3
-     local.get $6
-     local.get $0
-     local.get $3
-     f64.sub
-     local.tee $1
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $5
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $0
-      local.get $0
-      local.get $5
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.tee $3
-      f64.sub
-      local.tee $0
-      f64.sub
-      local.get $3
-      f64.sub
-      f64.sub
-      local.set $3
-      local.get $0
-      local.get $3
-      f64.sub
-      local.set $1
-     end
-    end
-    local.get $1
-    global.set $~lib/math/rempio2_y0
-    local.get $0
-    local.get $1
-    f64.sub
-    local.get $3
-    f64.sub
-    global.set $~lib/math/rempio2_y1
-    local.get $5
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.2
-   end
-   i32.const 0
-   local.get $2
-   call $~lib/math/pio2_large_quot
-   local.tee $4
-   i32.sub
-   local.get $4
-   local.get $6
-   select
-  end
-  local.set $6
+  local.get $0
+  local.get $2
+  local.get $3
+  call $~lib/math/rempio2
+  local.set $1
   global.get $~lib/math/rempio2_y0
   global.get $~lib/math/rempio2_y1
   i32.const 1
-  local.get $6
+  local.get $1
   i32.const 1
   i32.and
   i32.const 1
@@ -10184,241 +9325,37 @@
    i32.const 0
   end
  )
- (func $~lib/math/NativeMathf.tan (param $0 f32) (result f32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 f64)
-  (local $4 f64)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i64)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i64)
+ (func $~lib/math/tan_kernf (param $0 f64) (param $1 i32) (result f32)
+  (local $2 f64)
+  local.get $0
+  local.get $0
   local.get $0
-  i32.reinterpret_f32
-  local.tee $1
-  i32.const 31
-  i32.shr_u
-  local.set $11
-  local.get $1
-  i32.const 2147483647
-  i32.and
-  local.tee $2
-  i32.const 1061752794
-  i32.le_u
-  if
-   local.get $2
-   i32.const 964689920
-   i32.lt_u
-   if
-    local.get $0
-    return
-   end
-   local.get $0
-   f64.promote_f32
-   local.tee $5
-   local.get $5
-   f64.mul
-   local.tee $4
-   local.get $5
-   f64.mul
-   local.set $3
-   local.get $5
-   local.get $3
-   f64.const 0.3333313950307914
-   local.get $4
-   f64.const 0.13339200271297674
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $4
-   local.get $4
-   f64.mul
-   local.tee $3
-   f64.mul
-   f64.const 0.05338123784456704
-   local.get $4
-   f64.const 0.024528318116654728
-   f64.mul
-   f64.add
-   local.get $3
-   f64.const 0.002974357433599673
-   local.get $4
-   f64.const 0.009465647849436732
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f32.demote_f64
-   return
-  end
-  local.get $2
-  i32.const 2139095040
-  i32.ge_u
-  if
-   local.get $0
-   local.get $0
-   f32.sub
-   return
-  end
-  block $~lib/math/rempio2f|inlined.2 (result i32)
-   local.get $2
-   i32.const 1305022427
-   i32.lt_u
-   if
-    local.get $0
-    f64.promote_f32
-    local.get $0
-    f64.promote_f32
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.tee $3
-    f64.const 1.5707963109016418
-    f64.mul
-    f64.sub
-    local.get $3
-    f64.const 1.5893254773528196e-08
-    f64.mul
-    f64.sub
-    global.set $~lib/math/rempio2f_y
-    local.get $3
-    i32.trunc_f64_s
-    br $~lib/math/rempio2f|inlined.2
-   end
-   local.get $2
-   i32.const 23
-   i32.shr_s
-   i32.const 152
-   i32.sub
-   local.tee $1
-   i32.const 6
-   i32.shr_s
-   i32.const 3
-   i32.shl
-   i32.const 1256
-   i32.add
-   local.tee $10
-   i64.load
-   local.set $7
-   local.get $10
-   i64.load offset=8
-   local.set $8
-   local.get $1
-   i32.const 63
-   i32.and
-   i64.extend_i32_s
-   local.tee $6
-   i64.const 32
-   i64.gt_u
-   if (result i64)
-    local.get $8
-    local.get $6
-    i64.const 32
-    i64.sub
-    i64.shl
-    local.get $10
-    i64.load offset=16
-    i64.const 96
-    local.get $6
-    i64.sub
-    i64.shr_u
-    i64.or
-   else
-    local.get $8
-    i64.const 32
-    local.get $6
-    i64.sub
-    i64.shr_u
-   end
-   local.set $12
-   f64.const 8.515303950216386e-20
-   local.get $0
-   f64.promote_f32
-   f64.copysign
-   local.get $2
-   i32.const 8388607
-   i32.and
-   i32.const 8388608
-   i32.or
-   i64.extend_i32_s
-   local.tee $9
-   local.get $7
-   local.get $6
-   i64.shl
-   local.get $8
-   i64.const 64
-   local.get $6
-   i64.sub
-   i64.shr_u
-   i64.or
-   i64.mul
-   local.get $9
-   local.get $12
-   i64.mul
-   i64.const 32
-   i64.shr_u
-   i64.add
-   local.tee $7
-   i64.const 2
-   i64.shl
-   local.tee $9
-   f64.convert_i64_s
-   f64.mul
-   global.set $~lib/math/rempio2f_y
-   i32.const 0
-   local.get $7
-   i64.const 62
-   i64.shr_u
-   local.get $9
-   i64.const 63
-   i64.shr_u
-   i64.add
-   i32.wrap_i64
-   local.tee $1
-   i32.sub
-   local.get $1
-   local.get $11
-   select
-  end
-  global.get $~lib/math/rempio2f_y
-  local.tee $5
-  local.get $5
   f64.mul
-  local.tee $4
-  local.get $5
+  local.tee $2
+  local.get $0
   f64.mul
-  local.set $3
-  local.get $5
-  local.get $3
+  local.tee $0
   f64.const 0.3333313950307914
-  local.get $4
+  local.get $2
   f64.const 0.13339200271297674
   f64.mul
   f64.add
   f64.mul
   f64.add
-  local.get $3
-  local.get $4
-  local.get $4
+  local.get $0
+  local.get $2
+  local.get $2
   f64.mul
-  local.tee $3
+  local.tee $0
   f64.mul
   f64.const 0.05338123784456704
-  local.get $4
+  local.get $2
   f64.const 0.024528318116654728
   f64.mul
   f64.add
-  local.get $3
+  local.get $0
   f64.const 0.002974357433599673
-  local.get $4
+  local.get $2
   f64.const 0.009465647849436732
   f64.mul
   f64.add
@@ -10426,21 +9363,68 @@
   f64.add
   f64.mul
   f64.add
-  local.set $3
-  i32.const 1
-  i32.and
+  local.set $0
+  local.get $1
   if
    f64.const -1
-   local.get $3
+   local.get $0
    f64.div
-   local.set $3
+   local.set $0
   end
-  local.get $3
+  local.get $0
   f32.demote_f64
  )
  (func $std/math/test_tanf (param $0 f32) (param $1 f32) (param $2 f32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i32.reinterpret_f32
+  local.tee $3
+  i32.const 31
+  i32.shr_u
+  local.set $4
+  block $__inlined_func$~lib/math/NativeMathf.tan
+   local.get $3
+   i32.const 2147483647
+   i32.and
+   local.tee $3
+   i32.const 1061752794
+   i32.le_u
+   if
+    local.get $3
+    i32.const 964689920
+    i32.lt_u
+    br_if $__inlined_func$~lib/math/NativeMathf.tan
+    local.get $0
+    f64.promote_f32
+    i32.const 0
+    call $~lib/math/tan_kernf
+    local.set $0
+    br $__inlined_func$~lib/math/NativeMathf.tan
+   end
+   local.get $3
+   i32.const 2139095040
+   i32.ge_u
+   if
+    local.get $0
+    local.get $0
+    f32.sub
+    local.set $0
+    br $__inlined_func$~lib/math/NativeMathf.tan
+   end
+   local.get $0
+   local.get $3
+   local.get $4
+   call $~lib/math/rempio2f
+   local.set $3
+   global.get $~lib/math/rempio2f_y
+   local.get $3
+   i32.const 1
+   i32.and
+   call $~lib/math/tan_kernf
+   local.set $0
+  end
   local.get $0
-  call $~lib/math/NativeMathf.tan
   local.get $1
   local.get $2
   call $std/math/check<f32>
@@ -10631,41 +9615,31 @@
    i32.const 0
   end
  )
- (func $std/math/test_truncf (param $0 f32) (param $1 f32) (result i32)
-  local.get $0
-  f32.trunc
-  local.get $1
-  f32.const 0
-  call $std/math/check<f32>
- )
  (func $~lib/math/NativeMath.sincos (param $0 f64)
   (local $1 f64)
-  (local $2 f64)
-  (local $3 i64)
-  (local $4 f64)
+  (local $2 i32)
+  (local $3 f64)
+  (local $4 i64)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 f64)
-  (local $8 f64)
-  (local $9 f64)
+  (local $6 f64)
   local.get $0
   i64.reinterpret_f64
-  local.tee $3
+  local.tee $4
   i64.const 32
   i64.shr_u
   i32.wrap_i64
-  local.tee $5
+  local.tee $2
   i32.const 31
   i32.shr_u
-  local.set $6
-  local.get $5
+  local.set $5
+  local.get $2
   i32.const 2147483647
   i32.and
-  local.tee $5
+  local.tee $2
   i32.const 1072243195
   i32.le_u
   if
-   local.get $5
+   local.get $2
    i32.const 1044816030
    i32.lt_u
    if
@@ -10676,95 +9650,17 @@
     return
    end
    local.get $0
-   local.get $0
-   local.get $0
-   f64.mul
-   local.tee $2
-   local.get $0
-   f64.mul
-   f64.const -0.16666666666666632
-   local.get $2
-   f64.const 0.00833333333332249
-   local.get $2
-   f64.const -1.984126982985795e-04
-   local.get $2
-   f64.const 2.7557313707070068e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $2
-   local.get $2
-   local.get $2
-   f64.mul
-   f64.mul
-   f64.const -2.5050760253406863e-08
-   local.get $2
-   f64.const 1.58969099521155e-10
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
+   f64.const 0
+   i32.const 0
+   call $~lib/math/sin_kern
    global.set $~lib/math/NativeMath.sincos_sin
-   f64.const 1
-   f64.const 0.5
-   local.get $0
-   local.get $0
-   f64.mul
-   local.tee $2
-   f64.mul
-   local.tee $4
-   f64.sub
-   local.tee $1
-   f64.const 1
-   local.get $1
-   f64.sub
-   local.get $4
-   f64.sub
-   local.get $2
-   local.get $2
-   f64.const 0.0416666666666666
-   local.get $2
-   f64.const -0.001388888888887411
-   local.get $2
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $2
-   local.get $2
-   f64.mul
-   local.tee $4
-   local.get $4
-   f64.mul
-   f64.const -2.7557314351390663e-07
-   local.get $2
-   f64.const 2.087572321298175e-09
-   local.get $2
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
    local.get $0
    f64.const 0
-   f64.mul
-   f64.sub
-   f64.add
-   f64.add
+   call $~lib/math/cos_kern
    global.set $~lib/math/NativeMath.sincos_cos
    return
   end
-  local.get $5
+  local.get $2
   i32.const 2139095040
   i32.ge_u
   if
@@ -10777,251 +9673,48 @@
    global.set $~lib/math/NativeMath.sincos_cos
    return
   end
-  block $~lib/math/rempio2|inlined.3 (result i32)
-   local.get $3
-   i64.const 32
-   i64.shr_u
-   i32.wrap_i64
-   i32.const 2147483647
-   i32.and
-   local.tee $5
-   i32.const 1094263291
-   i32.lt_u
-   if
-    local.get $5
-    i32.const 20
-    i32.shr_u
-    local.tee $6
-    local.get $0
-    local.get $0
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.tee $2
-    f64.const 1.5707963267341256
-    f64.mul
-    f64.sub
-    local.tee $0
-    local.get $2
-    f64.const 6.077100506506192e-11
-    f64.mul
-    local.tee $4
-    f64.sub
-    local.tee $1
-    i64.reinterpret_f64
-    i64.const 32
-    i64.shr_u
-    i32.wrap_i64
-    i32.const 20
-    i32.shr_u
-    i32.const 2047
-    i32.and
-    i32.sub
-    i32.const 16
-    i32.gt_u
-    if
-     local.get $2
-     f64.const 2.0222662487959506e-21
-     f64.mul
-     local.get $0
-     local.get $0
-     local.get $2
-     f64.const 6.077100506303966e-11
-     f64.mul
-     local.tee $4
-     f64.sub
-     local.tee $0
-     f64.sub
-     local.get $4
-     f64.sub
-     f64.sub
-     local.set $4
-     local.get $6
-     local.get $0
-     local.get $4
-     f64.sub
-     local.tee $1
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $2
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $0
-      local.get $0
-      local.get $2
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.tee $4
-      f64.sub
-      local.tee $0
-      f64.sub
-      local.get $4
-      f64.sub
-      f64.sub
-      local.set $4
-      local.get $0
-      local.get $4
-      f64.sub
-      local.set $1
-     end
-    end
-    local.get $1
-    global.set $~lib/math/rempio2_y0
-    local.get $0
-    local.get $1
-    f64.sub
-    local.get $4
-    f64.sub
-    global.set $~lib/math/rempio2_y1
-    local.get $2
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.3
-   end
-   i32.const 0
-   local.get $3
-   call $~lib/math/pio2_large_quot
-   local.tee $5
-   i32.sub
-   local.get $5
-   local.get $6
-   select
-  end
-  local.set $6
-  global.get $~lib/math/rempio2_y0
-  local.tee $4
-  local.get $4
-  f64.mul
-  local.tee $0
+  local.get $0
   local.get $4
-  f64.mul
+  local.get $5
+  call $~lib/math/rempio2
   local.set $2
-  local.get $4
-  local.get $0
-  f64.const 0.5
-  global.get $~lib/math/rempio2_y1
+  global.get $~lib/math/rempio2_y0
   local.tee $1
-  f64.mul
-  local.get $2
-  f64.const 0.00833333333332249
-  local.get $0
-  f64.const -1.984126982985795e-04
-  local.get $0
-  f64.const 2.7557313707070068e-06
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  local.get $0
-  local.get $0
-  local.get $0
-  f64.mul
-  f64.mul
-  f64.const -2.5050760253406863e-08
-  local.get $0
-  f64.const 1.58969099521155e-10
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  f64.mul
-  f64.sub
-  f64.mul
-  local.get $1
-  f64.sub
-  local.get $2
-  f64.const -0.16666666666666632
-  f64.mul
-  f64.sub
-  f64.sub
-  local.tee $8
+  global.get $~lib/math/rempio2_y1
+  local.tee $3
+  i32.const 1
+  call $~lib/math/sin_kern
+  local.tee $6
   local.set $0
-  f64.const 1
-  f64.const 0.5
-  local.get $4
-  local.get $4
-  f64.mul
-  local.tee $2
-  f64.mul
-  local.tee $7
-  f64.sub
-  local.tee $9
-  f64.const 1
-  local.get $9
-  f64.sub
-  local.get $7
-  f64.sub
-  local.get $2
-  local.get $2
-  f64.const 0.0416666666666666
-  local.get $2
-  f64.const -0.001388888888887411
-  local.get $2
-  f64.const 2.480158728947673e-05
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  f64.mul
-  local.get $2
-  local.get $2
-  f64.mul
-  local.tee $7
-  local.get $7
-  f64.mul
-  f64.const -2.7557314351390663e-07
-  local.get $2
-  f64.const 2.087572321298175e-09
-  local.get $2
-  f64.const -1.1359647557788195e-11
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  f64.mul
-  local.get $4
   local.get $1
-  f64.mul
-  f64.sub
-  f64.add
-  f64.add
-  local.tee $2
-  local.set $4
-  local.get $6
+  local.get $3
+  call $~lib/math/cos_kern
+  local.tee $1
+  local.set $3
+  local.get $2
   i32.const 1
   i32.and
   if
-   local.get $8
+   local.get $6
    f64.neg
-   local.set $4
-   local.get $2
+   local.set $3
+   local.get $1
    local.set $0
   end
-  local.get $6
+  local.get $2
   i32.const 2
   i32.and
   if (result f64)
-   local.get $4
+   local.get $3
    f64.neg
-   local.set $4
+   local.set $3
    local.get $0
    f64.neg
   else
    local.get $0
   end
   global.set $~lib/math/NativeMath.sincos_sin
-  local.get $4
+  local.get $3
   global.set $~lib/math/NativeMath.sincos_cos
  )
  (func $std/math/test_sincos (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64)
@@ -11422,8 +10115,10 @@
   end
   f64.const -8.06684839057968
   i32.const -2
+  call $~lib/math/NativeMath.scalbn
   f64.const -2.01671209764492
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11435,8 +10130,10 @@
   end
   f64.const 4.345239849338305
   i32.const -1
+  call $~lib/math/NativeMath.scalbn
   f64.const 2.1726199246691524
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11448,8 +10145,10 @@
   end
   f64.const -8.38143342755525
   i32.const 0
+  call $~lib/math/NativeMath.scalbn
   f64.const -8.38143342755525
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11461,8 +10160,10 @@
   end
   f64.const -6.531673581913484
   i32.const 1
+  call $~lib/math/NativeMath.scalbn
   f64.const -13.063347163826968
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11474,8 +10175,10 @@
   end
   f64.const 9.267056966972586
   i32.const 2
+  call $~lib/math/NativeMath.scalbn
   f64.const 37.06822786789034
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11487,8 +10190,10 @@
   end
   f64.const 0.6619858980995045
   i32.const 3
+  call $~lib/math/NativeMath.scalbn
   f64.const 5.295887184796036
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11500,8 +10205,10 @@
   end
   f64.const -0.4066039223853553
   i32.const 4
+  call $~lib/math/NativeMath.scalbn
   f64.const -6.505662758165685
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11513,8 +10220,10 @@
   end
   f64.const 0.5617597462207241
   i32.const 5
+  call $~lib/math/NativeMath.scalbn
   f64.const 17.97631187906317
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11526,8 +10235,10 @@
   end
   f64.const 0.7741522965913037
   i32.const 6
+  call $~lib/math/NativeMath.scalbn
   f64.const 49.545746981843436
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11539,8 +10250,10 @@
   end
   f64.const -0.6787637026394024
   i32.const 7
+  call $~lib/math/NativeMath.scalbn
   f64.const -86.88175393784351
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11552,8 +10265,10 @@
   end
   f64.const 0
   i32.const 2147483647
+  call $~lib/math/NativeMath.scalbn
   f64.const 0
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11565,8 +10280,10 @@
   end
   f64.const 0
   i32.const -2147483647
+  call $~lib/math/NativeMath.scalbn
+  f64.const 0
   f64.const 0
-  call $std/math/test_scalbn
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11578,8 +10295,10 @@
   end
   f64.const -0
   i32.const 2147483647
+  call $~lib/math/NativeMath.scalbn
   f64.const -0
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11591,8 +10310,10 @@
   end
   f64.const nan:0x8000000000000
   i32.const 0
+  call $~lib/math/NativeMath.scalbn
   f64.const nan:0x8000000000000
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11604,8 +10325,10 @@
   end
   f64.const inf
   i32.const 0
+  call $~lib/math/NativeMath.scalbn
   f64.const inf
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11617,8 +10340,10 @@
   end
   f64.const -inf
   i32.const 0
+  call $~lib/math/NativeMath.scalbn
   f64.const -inf
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11630,8 +10355,10 @@
   end
   f64.const 1
   i32.const 0
+  call $~lib/math/NativeMath.scalbn
   f64.const 1
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11643,8 +10370,10 @@
   end
   f64.const 1
   i32.const 1
+  call $~lib/math/NativeMath.scalbn
   f64.const 2
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11656,8 +10385,10 @@
   end
   f64.const 1
   i32.const -1
+  call $~lib/math/NativeMath.scalbn
   f64.const 0.5
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11669,8 +10400,10 @@
   end
   f64.const 1
   i32.const 2147483647
+  call $~lib/math/NativeMath.scalbn
   f64.const inf
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11682,8 +10415,10 @@
   end
   f64.const nan:0x8000000000000
   i32.const 1
+  call $~lib/math/NativeMath.scalbn
   f64.const nan:0x8000000000000
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11695,8 +10430,10 @@
   end
   f64.const inf
   i32.const 2147483647
+  call $~lib/math/NativeMath.scalbn
   f64.const inf
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11708,8 +10445,10 @@
   end
   f64.const inf
   i32.const -2147483647
+  call $~lib/math/NativeMath.scalbn
   f64.const inf
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11721,8 +10460,10 @@
   end
   f64.const -inf
   i32.const 2147483647
+  call $~lib/math/NativeMath.scalbn
   f64.const -inf
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11734,8 +10475,10 @@
   end
   f64.const 8988465674311579538646525e283
   i32.const -2097
+  call $~lib/math/NativeMath.scalbn
   f64.const 5e-324
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11747,8 +10490,10 @@
   end
   f64.const 5e-324
   i32.const 2097
+  call $~lib/math/NativeMath.scalbn
   f64.const 8988465674311579538646525e283
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11760,8 +10505,10 @@
   end
   f64.const 1.000244140625
   i32.const -1074
+  call $~lib/math/NativeMath.scalbn
   f64.const 5e-324
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11773,8 +10520,10 @@
   end
   f64.const 0.7499999999999999
   i32.const -1073
+  call $~lib/math/NativeMath.scalbn
   f64.const 5e-324
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11786,8 +10535,10 @@
   end
   f64.const 0.5000000000000012
   i32.const -1024
+  call $~lib/math/NativeMath.scalbn
   f64.const 2.781342323134007e-309
-  call $std/math/test_scalbn
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -11799,8 +10550,10 @@
   end
   f32.const -8.066848754882812
   i32.const -2
+  call $~lib/math/NativeMathf.scalbn
   f32.const -2.016712188720703
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11812,8 +10565,10 @@
   end
   f32.const 4.345239639282227
   i32.const -1
+  call $~lib/math/NativeMathf.scalbn
   f32.const 2.1726198196411133
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11825,8 +10580,10 @@
   end
   f32.const -8.381433486938477
   i32.const 0
+  call $~lib/math/NativeMathf.scalbn
   f32.const -8.381433486938477
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11838,8 +10595,10 @@
   end
   f32.const -6.531673431396484
   i32.const 1
+  call $~lib/math/NativeMathf.scalbn
   f32.const -13.063346862792969
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11851,8 +10610,10 @@
   end
   f32.const 9.267057418823242
   i32.const 2
+  call $~lib/math/NativeMathf.scalbn
   f32.const 37.06822967529297
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11864,8 +10625,10 @@
   end
   f32.const 0.6619858741760254
   i32.const 3
+  call $~lib/math/NativeMathf.scalbn
   f32.const 5.295886993408203
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11877,8 +10640,10 @@
   end
   f32.const -0.40660393238067627
   i32.const 4
+  call $~lib/math/NativeMathf.scalbn
   f32.const -6.50566291809082
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11890,8 +10655,10 @@
   end
   f32.const 0.5617597699165344
   i32.const 5
+  call $~lib/math/NativeMathf.scalbn
   f32.const 17.9763126373291
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11903,8 +10670,10 @@
   end
   f32.const 0.7741522789001465
   i32.const 6
+  call $~lib/math/NativeMathf.scalbn
   f32.const 49.545745849609375
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11916,8 +10685,10 @@
   end
   f32.const -0.6787636876106262
   i32.const 7
+  call $~lib/math/NativeMathf.scalbn
   f32.const -86.88175201416016
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11929,8 +10700,10 @@
   end
   f32.const 0
   i32.const 2147483647
+  call $~lib/math/NativeMathf.scalbn
+  f32.const 0
   f32.const 0
-  call $std/math/test_scalbnf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11942,8 +10715,10 @@
   end
   f32.const 0
   i32.const -2147483647
+  call $~lib/math/NativeMathf.scalbn
   f32.const 0
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11955,8 +10730,10 @@
   end
   f32.const -0
   i32.const 2147483647
+  call $~lib/math/NativeMathf.scalbn
   f32.const -0
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11968,8 +10745,10 @@
   end
   f32.const nan:0x400000
   i32.const 0
+  call $~lib/math/NativeMathf.scalbn
   f32.const nan:0x400000
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11981,8 +10760,10 @@
   end
   f32.const inf
   i32.const 0
+  call $~lib/math/NativeMathf.scalbn
   f32.const inf
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -11994,8 +10775,10 @@
   end
   f32.const -inf
   i32.const 0
+  call $~lib/math/NativeMathf.scalbn
   f32.const -inf
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12007,8 +10790,10 @@
   end
   f32.const 1
   i32.const 0
+  call $~lib/math/NativeMathf.scalbn
   f32.const 1
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12020,8 +10805,10 @@
   end
   f32.const 1
   i32.const 1
+  call $~lib/math/NativeMathf.scalbn
   f32.const 2
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12033,8 +10820,10 @@
   end
   f32.const 1
   i32.const -1
+  call $~lib/math/NativeMathf.scalbn
   f32.const 0.5
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12046,8 +10835,10 @@
   end
   f32.const 1
   i32.const 2147483647
+  call $~lib/math/NativeMathf.scalbn
   f32.const inf
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12059,8 +10850,10 @@
   end
   f32.const nan:0x400000
   i32.const 1
+  call $~lib/math/NativeMathf.scalbn
   f32.const nan:0x400000
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12072,8 +10865,10 @@
   end
   f32.const inf
   i32.const 2147483647
+  call $~lib/math/NativeMathf.scalbn
   f32.const inf
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12085,8 +10880,10 @@
   end
   f32.const inf
   i32.const -2147483647
+  call $~lib/math/NativeMathf.scalbn
   f32.const inf
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12098,8 +10895,10 @@
   end
   f32.const -inf
   i32.const 2147483647
+  call $~lib/math/NativeMathf.scalbn
   f32.const -inf
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12111,8 +10910,10 @@
   end
   f32.const 1701411834604692317316873e14
   i32.const -276
+  call $~lib/math/NativeMathf.scalbn
   f32.const 1.401298464324817e-45
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12124,8 +10925,10 @@
   end
   f32.const 1.401298464324817e-45
   i32.const 276
+  call $~lib/math/NativeMathf.scalbn
   f32.const 1701411834604692317316873e14
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12137,8 +10940,10 @@
   end
   f32.const 1.000244140625
   i32.const -149
+  call $~lib/math/NativeMathf.scalbn
   f32.const 1.401298464324817e-45
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12150,8 +10955,10 @@
   end
   f32.const 0.7499999403953552
   i32.const -148
+  call $~lib/math/NativeMathf.scalbn
   f32.const 1.401298464324817e-45
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12163,8 +10970,10 @@
   end
   f32.const 0.5000006556510925
   i32.const -128
+  call $~lib/math/NativeMathf.scalbn
   f32.const 1.4693693398263237e-39
-  call $std/math/test_scalbnf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12378,9 +11187,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.066848754882812
   f32.const 8.066848754882812
-  call $std/math/test_absf
+  f32.const 8.066848754882812
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12392,7 +11202,8 @@
   end
   f32.const 4.345239639282227
   f32.const 4.345239639282227
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12402,9 +11213,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.381433486938477
   f32.const 8.381433486938477
-  call $std/math/test_absf
+  f32.const 8.381433486938477
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12414,9 +11226,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.531673431396484
   f32.const 6.531673431396484
-  call $std/math/test_absf
+  f32.const 6.531673431396484
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12428,7 +11241,8 @@
   end
   f32.const 9.267057418823242
   f32.const 9.267057418823242
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12440,7 +11254,8 @@
   end
   f32.const 0.6619858741760254
   f32.const 0.6619858741760254
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12450,9 +11265,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.40660393238067627
   f32.const 0.40660393238067627
-  call $std/math/test_absf
+  f32.const 0.40660393238067627
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12464,7 +11280,8 @@
   end
   f32.const 0.5617597699165344
   f32.const 0.5617597699165344
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12476,7 +11293,8 @@
   end
   f32.const 0.7741522789001465
   f32.const 0.7741522789001465
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12486,9 +11304,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.6787636876106262
   f32.const 0.6787636876106262
-  call $std/math/test_absf
+  f32.const 0.6787636876106262
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12500,7 +11319,8 @@
   end
   f32.const 0
   f32.const 0
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12510,9 +11330,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const 0
-  call $std/math/test_absf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12524,7 +11345,8 @@
   end
   f32.const 1
   f32.const 1
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12534,9 +11356,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const 1
-  call $std/math/test_absf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12548,7 +11371,8 @@
   end
   f32.const inf
   f32.const inf
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12558,9 +11382,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const inf
-  call $std/math/test_absf
+  f32.const inf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12572,7 +11397,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_absf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12843,9 +11669,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12856,9 +11683,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12869,9 +11697,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12882,9 +11711,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12895,9 +11725,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12908,9 +11739,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.acos
   f32.const 0.8473311066627502
   f32.const -0.13588131964206696
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12921,9 +11753,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.acos
   f32.const 1.989530086517334
   f32.const 0.03764917701482773
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12934,9 +11767,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.acos
   f32.const 0.9742849469184875
   f32.const 0.18443739414215088
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12947,9 +11781,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.acos
   f32.const 0.6854215264320374
   f32.const -0.29158344864845276
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12960,9 +11795,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.acos
   f32.const 2.3168740272521973
   f32.const -0.3795364499092102
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12973,9 +11809,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.acos
   f32.const 1.5707963705062866
   f32.const 0.3666777014732361
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12986,9 +11823,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.acos
   f32.const 3.1415927410125732
   f32.const 0.3666777014732361
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -12999,9 +11837,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.acos
   f32.const 0
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13012,9 +11851,10 @@
    unreachable
   end
   f32.const 1.0000001192092896
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13025,9 +11865,10 @@
    unreachable
   end
   f32.const -1.0000001192092896
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13038,9 +11879,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13051,9 +11893,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13064,9 +11907,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.acos
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13077,9 +11921,10 @@
    unreachable
   end
   f32.const 0.49965065717697144
+  call $~lib/math/NativeMathf.acos
   f32.const 1.0476008653640747
   f32.const -0.21161814033985138
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13090,9 +11935,10 @@
    unreachable
   end
   f32.const -0.5051405429840088
+  call $~lib/math/NativeMathf.acos
   f32.const 2.1003410816192627
   f32.const -0.20852705836296082
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13103,9 +11949,10 @@
    unreachable
   end
   f32.const -0.5189794898033142
+  call $~lib/math/NativeMathf.acos
   f32.const 2.116452932357788
   f32.const -0.14600826799869537
-  call $std/math/test_acosf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13870,9 +12717,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13883,9 +12731,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13896,9 +12745,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13909,9 +12759,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13922,9 +12773,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13935,9 +12787,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.asin
   f32.const 0.7234652042388916
   f32.const -0.1307632476091385
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13948,9 +12801,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.asin
   f32.const -0.41873374581336975
   f32.const 0.3161141574382782
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13961,9 +12815,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.asin
   f32.const 0.5965113639831543
   f32.const -0.4510819613933563
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13974,9 +12829,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.asin
   f32.const 0.8853747844696045
   f32.const 0.02493886835873127
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -13987,9 +12843,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.asin
   f32.const -0.7460777759552002
   f32.const 0.2515012323856354
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14000,9 +12857,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.asin
   f32.const 1.5707963705062866
   f32.const 0.3666777014732361
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14013,9 +12871,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.asin
   f32.const -1.5707963705062866
   f32.const -0.3666777014732361
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14026,9 +12885,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.asin
   f32.const 0
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14039,9 +12899,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.asin
   f32.const -0
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14052,9 +12913,10 @@
    unreachable
   end
   f32.const 1.0000001192092896
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14065,9 +12927,10 @@
    unreachable
   end
   f32.const -1.0000001192092896
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14078,9 +12941,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14091,9 +12955,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14104,9 +12969,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.asin
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14117,9 +12983,10 @@
    unreachable
   end
   f32.const 0.5004770159721375
+  call $~lib/math/NativeMathf.asin
   f32.const 0.5241496562957764
   f32.const -0.29427099227905273
-  call $std/math/test_asinf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14754,9 +13621,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.atan
   f32.const -1.4474613666534424
   f32.const 0.12686480581760406
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14767,9 +13635,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.atan
   f32.const 1.3445979356765747
   f32.const 0.16045434772968292
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14780,9 +13649,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.atan
   f32.const -1.4520463943481445
   f32.const -0.39581751823425293
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14793,9 +13663,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.atan
   f32.const -1.418875813484192
   f32.const 0.410570353269577
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14806,9 +13677,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.atan
   f32.const 1.4633032083511353
   f32.const 0.48403501510620117
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14819,9 +13691,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.atan
   f32.const 0.5847550630569458
   f32.const 0.2125193476676941
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14832,9 +13705,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.atan
   f32.const -0.386186420917511
   f32.const 0.18169628083705902
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14845,9 +13719,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.atan
   f32.const 0.5118269920349121
   f32.const 0.3499770760536194
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14858,9 +13733,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.atan
   f32.const 0.6587802171707153
   f32.const -0.2505330741405487
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14871,9 +13747,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.atan
   f32.const -0.5963307619094849
   f32.const 0.17614826560020447
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14884,9 +13761,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.atan
   f32.const 0
   f32.const 0
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14897,9 +13775,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.atan
   f32.const -0
   f32.const 0
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14910,9 +13789,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.atan
   f32.const 0.7853981852531433
   f32.const 0.3666777014732361
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14923,9 +13803,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.atan
   f32.const -0.7853981852531433
   f32.const -0.3666777014732361
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14936,9 +13817,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.atan
   f32.const 1.5707963705062866
   f32.const 0.3666777014732361
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14949,9 +13831,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.atan
   f32.const -1.5707963705062866
   f32.const -0.3666777014732361
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -14962,9 +13845,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.atan
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_atanf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16160,9 +15044,10 @@
   end
   f32.const -8.066848754882812
   f32.const 4.535662651062012
+  call $~lib/math/NativeMathf.atan2
   f32.const -1.0585895776748657
   f32.const -0.22352588176727295
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16174,9 +15059,10 @@
   end
   f32.const 4.345239639282227
   f32.const -8.887990951538086
+  call $~lib/math/NativeMathf.atan2
   f32.const 2.686873435974121
   f32.const 0.09464472532272339
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16188,9 +15074,10 @@
   end
   f32.const -8.381433486938477
   f32.const -2.7636072635650635
+  call $~lib/math/NativeMathf.atan2
   f32.const -1.8893001079559326
   f32.const -0.21941901743412018
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16202,9 +15089,10 @@
   end
   f32.const -6.531673431396484
   f32.const 4.567535400390625
+  call $~lib/math/NativeMathf.atan2
   f32.const -0.9605468511581421
   f32.const 0.46015575528144836
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16216,9 +15104,10 @@
   end
   f32.const 9.267057418823242
   f32.const 4.811392307281494
+  call $~lib/math/NativeMathf.atan2
   f32.const 1.0919123888015747
   f32.const -0.05708503723144531
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16230,9 +15119,10 @@
   end
   f32.const -6.450045585632324
   f32.const 0.6620717644691467
+  call $~lib/math/NativeMathf.atan2
   f32.const -1.4685084819793701
   f32.const 0.19611206650733948
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16244,9 +15134,10 @@
   end
   f32.const 7.858890056610107
   f32.const 0.052154526114463806
+  call $~lib/math/NativeMathf.atan2
   f32.const 1.5641601085662842
   f32.const 0.48143187165260315
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16258,9 +15149,10 @@
   end
   f32.const -0.7920545339584351
   f32.const 7.676402568817139
+  call $~lib/math/NativeMathf.atan2
   f32.const -0.10281659662723541
   f32.const -0.4216274917125702
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16272,9 +15164,10 @@
   end
   f32.const 0.6157026886940002
   f32.const 2.0119025707244873
+  call $~lib/math/NativeMathf.atan2
   f32.const 0.29697975516319275
   f32.const 0.2322007566690445
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16286,9 +15179,10 @@
   end
   f32.const -0.5587586760520935
   f32.const 0.03223983198404312
+  call $~lib/math/NativeMathf.atan2
   f32.const -1.5131611824035645
   f32.const 0.16620726883411407
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16300,9 +15194,10 @@
   end
   f32.const 0
   f32.const 0
+  call $~lib/math/NativeMathf.atan2
   f32.const 0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16314,9 +15209,10 @@
   end
   f32.const 0
   f32.const -0
+  call $~lib/math/NativeMathf.atan2
   f32.const 3.1415927410125732
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16328,9 +15224,10 @@
   end
   f32.const 0
   f32.const -1
+  call $~lib/math/NativeMathf.atan2
   f32.const 3.1415927410125732
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16342,9 +15239,10 @@
   end
   f32.const 0
   f32.const -inf
+  call $~lib/math/NativeMathf.atan2
   f32.const 3.1415927410125732
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16356,9 +15254,10 @@
   end
   f32.const 0
   f32.const 1
+  call $~lib/math/NativeMathf.atan2
   f32.const 0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16370,9 +15269,10 @@
   end
   f32.const 0
   f32.const inf
+  call $~lib/math/NativeMathf.atan2
   f32.const 0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16384,9 +15284,10 @@
   end
   f32.const -0
   f32.const 0
+  call $~lib/math/NativeMathf.atan2
   f32.const -0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16398,9 +15299,10 @@
   end
   f32.const -0
   f32.const -0
+  call $~lib/math/NativeMathf.atan2
   f32.const -3.1415927410125732
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16412,9 +15314,10 @@
   end
   f32.const -0
   f32.const -1
+  call $~lib/math/NativeMathf.atan2
   f32.const -3.1415927410125732
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16426,9 +15329,10 @@
   end
   f32.const -0
   f32.const -inf
+  call $~lib/math/NativeMathf.atan2
   f32.const -3.1415927410125732
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16440,9 +15344,10 @@
   end
   f32.const -0
   f32.const 1
+  call $~lib/math/NativeMathf.atan2
   f32.const -0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16454,9 +15359,10 @@
   end
   f32.const -0
   f32.const inf
+  call $~lib/math/NativeMathf.atan2
   f32.const -0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16468,9 +15374,10 @@
   end
   f32.const -1
   f32.const 0
+  call $~lib/math/NativeMathf.atan2
   f32.const -1.5707963705062866
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16482,9 +15389,10 @@
   end
   f32.const -1
   f32.const -0
+  call $~lib/math/NativeMathf.atan2
   f32.const -1.5707963705062866
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16496,9 +15404,10 @@
   end
   f32.const 1
   f32.const 0
+  call $~lib/math/NativeMathf.atan2
   f32.const 1.5707963705062866
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16510,9 +15419,10 @@
   end
   f32.const 1
   f32.const -0
+  call $~lib/math/NativeMathf.atan2
   f32.const 1.5707963705062866
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16524,9 +15434,10 @@
   end
   f32.const -1
   f32.const inf
+  call $~lib/math/NativeMathf.atan2
   f32.const -0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16538,9 +15449,10 @@
   end
   f32.const 1
   f32.const inf
+  call $~lib/math/NativeMathf.atan2
   f32.const 0
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16552,9 +15464,10 @@
   end
   f32.const -1
   f32.const -inf
+  call $~lib/math/NativeMathf.atan2
   f32.const -3.1415927410125732
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16566,9 +15479,10 @@
   end
   f32.const 1
   f32.const -inf
+  call $~lib/math/NativeMathf.atan2
   f32.const 3.1415927410125732
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16580,9 +15494,10 @@
   end
   f32.const inf
   f32.const 0
+  call $~lib/math/NativeMathf.atan2
   f32.const 1.5707963705062866
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16594,9 +15509,10 @@
   end
   f32.const -inf
   f32.const 0
+  call $~lib/math/NativeMathf.atan2
   f32.const -1.5707963705062866
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16608,9 +15524,10 @@
   end
   f32.const inf
   f32.const inf
+  call $~lib/math/NativeMathf.atan2
   f32.const 0.7853981852531433
   f32.const 0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16622,9 +15539,10 @@
   end
   f32.const inf
   f32.const -inf
+  call $~lib/math/NativeMathf.atan2
   f32.const 2.356194496154785
   f32.const 0.02500828728079796
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16636,9 +15554,10 @@
   end
   f32.const -inf
   f32.const inf
+  call $~lib/math/NativeMathf.atan2
   f32.const -0.7853981852531433
   f32.const -0.3666777014732361
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16650,9 +15569,10 @@
   end
   f32.const -inf
   f32.const -inf
+  call $~lib/math/NativeMathf.atan2
   f32.const -2.356194496154785
   f32.const -0.02500828728079796
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16664,9 +15584,10 @@
   end
   f32.const 5.877471754111438e-39
   f32.const 1
+  call $~lib/math/NativeMathf.atan2
   f32.const 5.877471754111438e-39
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16678,9 +15599,10 @@
   end
   f32.const 1
   f32.const 1701411834604692317316873e14
+  call $~lib/math/NativeMathf.atan2
   f32.const 5.877471754111438e-39
   f32.const 0
-  call $std/math/test_atan2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16951,9 +15873,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.cbrt
   f32.const -2.0055553913116455
   f32.const -0.44719240069389343
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16964,9 +15887,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.cbrt
   f32.const 1.6318162679672241
   f32.const 0.44636252522468567
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16977,9 +15901,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.cbrt
   f32.const -2.0312938690185547
   f32.const 0.19483426213264465
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -16990,9 +15915,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.cbrt
   f32.const -1.8692820072174072
   f32.const -0.17075514793395996
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17003,9 +15929,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.cbrt
   f32.const 2.1004576683044434
   f32.const -0.36362043023109436
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17016,9 +15943,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.cbrt
   f32.const 0.8715311288833618
   f32.const -0.12857209146022797
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17029,9 +15957,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.cbrt
   f32.const -0.7408390641212463
   f32.const -0.4655757546424866
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17042,9 +15971,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.cbrt
   f32.const 0.8251195549964905
   f32.const 0.05601907894015312
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17055,9 +15985,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.cbrt
   f32.const 0.9182102680206299
   f32.const 0.45498204231262207
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17068,9 +15999,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.cbrt
   f32.const -0.8788326978683472
   f32.const -0.22978967428207397
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17081,9 +16013,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.cbrt
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17094,9 +16027,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.cbrt
   f32.const inf
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17107,9 +16041,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.cbrt
   f32.const -inf
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17120,9 +16055,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.cbrt
   f32.const 0
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17133,9 +16069,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.cbrt
   f32.const -0
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17146,9 +16083,10 @@
    unreachable
   end
   f32.const 9.313225746154785e-10
+  call $~lib/math/NativeMathf.cbrt
   f32.const 0.0009765625
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17159,9 +16097,10 @@
    unreachable
   end
   f32.const -9.313225746154785e-10
+  call $~lib/math/NativeMathf.cbrt
   f32.const -0.0009765625
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17172,9 +16111,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.cbrt
   f32.const 1
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17185,9 +16125,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.cbrt
   f32.const -1
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17198,9 +16139,10 @@
    unreachable
   end
   f32.const 8
+  call $~lib/math/NativeMathf.cbrt
   f32.const 2
   f32.const 0
-  call $std/math/test_cbrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17870,9 +16812,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.066848754882812
   f32.const -8
-  call $std/math/test_ceilf
+  f32.const -8
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17882,9 +16825,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4.345239639282227
   f32.const 5
-  call $std/math/test_ceilf
+  f32.const 5
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17894,9 +16838,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.381433486938477
   f32.const -8
-  call $std/math/test_ceilf
+  f32.const -8
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17906,9 +16851,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.531673431396484
   f32.const -6
-  call $std/math/test_ceilf
+  f32.const -6
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17918,9 +16864,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 9.267057418823242
   f32.const 10
-  call $std/math/test_ceilf
+  f32.const 10
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17930,9 +16877,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.6619858741760254
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17942,9 +16890,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.40660393238067627
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17954,9 +16903,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5617597699165344
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17966,9 +16916,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.7741522789001465
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17978,9 +16929,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.6787636876106262
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -17992,7 +16944,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18004,7 +16957,8 @@
   end
   f32.const inf
   f32.const inf
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18016,7 +16970,8 @@
   end
   f32.const -inf
   f32.const -inf
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18028,7 +16983,8 @@
   end
   f32.const 0
   f32.const 0
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18040,7 +16996,8 @@
   end
   f32.const -0
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18052,7 +17009,8 @@
   end
   f32.const 1
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18064,7 +17022,8 @@
   end
   f32.const -1
   f32.const -1
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18074,9 +17033,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18086,9 +17046,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18098,9 +17059,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.0000152587890625
   f32.const 2
-  call $std/math/test_ceilf
+  f32.const 2
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18110,9 +17072,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.0000152587890625
   f32.const -1
-  call $std/math/test_ceilf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18122,9 +17085,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.9999923706054688
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18134,9 +17098,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.9999923706054688
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18146,9 +17111,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 7.888609052210118e-31
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18158,9 +17124,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -7.888609052210118e-31
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18172,7 +17139,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18184,7 +17152,8 @@
   end
   f32.const inf
   f32.const inf
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18196,7 +17165,8 @@
   end
   f32.const -inf
   f32.const -inf
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18208,7 +17178,8 @@
   end
   f32.const 0
   f32.const 0
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18220,7 +17191,8 @@
   end
   f32.const -0
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18232,7 +17204,8 @@
   end
   f32.const 1
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18244,7 +17217,8 @@
   end
   f32.const -1
   f32.const -1
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18254,9 +17228,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18266,9 +17241,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18278,9 +17254,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.0000152587890625
   f32.const 2
-  call $std/math/test_ceilf
+  f32.const 2
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18290,9 +17267,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.0000152587890625
   f32.const -1
-  call $std/math/test_ceilf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18302,9 +17280,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.9999923706054688
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18314,9 +17293,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.9999923706054688
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18326,9 +17306,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 7.888609052210118e-31
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18338,9 +17319,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -7.888609052210118e-31
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18352,7 +17334,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18364,7 +17347,8 @@
   end
   f32.const inf
   f32.const inf
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18376,7 +17360,8 @@
   end
   f32.const -inf
   f32.const -inf
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18388,7 +17373,8 @@
   end
   f32.const 0
   f32.const 0
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18400,7 +17386,8 @@
   end
   f32.const -0
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18412,7 +17399,8 @@
   end
   f32.const 1
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18424,7 +17412,8 @@
   end
   f32.const -1
   f32.const -1
-  call $std/math/test_ceilf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18434,9 +17423,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18446,9 +17436,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18458,9 +17449,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.0000152587890625
   f32.const 2
-  call $std/math/test_ceilf
+  f32.const 2
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18470,9 +17462,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.0000152587890625
   f32.const -1
-  call $std/math/test_ceilf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18482,9 +17475,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.9999923706054688
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18494,9 +17488,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.9999923706054688
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18506,9 +17501,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 7.888609052210118e-31
   f32.const 1
-  call $std/math/test_ceilf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -18518,9 +17514,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -7.888609052210118e-31
   f32.const -0
-  call $std/math/test_ceilf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21490,9 +20487,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.cosh
   f32.const 1593.5216064453125
   f32.const 0.26242581009864807
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21503,9 +20501,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.cosh
   f32.const 38.56174087524414
   f32.const -0.08168885856866837
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21516,9 +20515,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.cosh
   f32.const 2182.631103515625
   f32.const -0.02331414446234703
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21529,9 +20529,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.cosh
   f32.const 343.2738037109375
   f32.const 0.20081493258476257
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21542,9 +20543,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.cosh
   f32.const 5291.78173828125
   f32.const 0.36286723613739014
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21555,9 +20557,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.cosh
   f32.const 1.2272322177886963
   f32.const 0.32777416706085205
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21568,9 +20571,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.cosh
   f32.const 1.0838085412979126
   f32.const -0.039848703891038895
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21581,9 +20585,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.cosh
   f32.const 1.161980390548706
   f32.const 0.15274477005004883
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21594,9 +20599,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.cosh
   f32.const 1.314923644065857
   f32.const -0.2387111485004425
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21607,9 +20613,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.cosh
   f32.const 1.2393412590026855
   f32.const -0.45791932940483093
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21620,9 +20627,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.cosh
   f32.const 1
   f32.const 0
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21633,9 +20641,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.cosh
   f32.const 1
   f32.const 0
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21646,9 +20655,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.cosh
   f32.const inf
   f32.const 0
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21659,9 +20669,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.cosh
   f32.const inf
   f32.const 0
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -21672,9 +20683,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.cosh
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_coshf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22244,9 +21256,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.exp
   f32.const 3.1377049162983894e-04
   f32.const -0.030193336308002472
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22257,9 +21270,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.exp
   f32.const 77.11051177978516
   f32.const -0.2875460684299469
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22270,9 +21284,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.exp
   f32.const 2.2908132814336568e-04
   f32.const 0.2237040400505066
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22283,9 +21298,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.exp
   f32.const 1.4565663877874613e-03
   f32.const 0.36469703912734985
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22296,9 +21312,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.exp
   f32.const 10583.5634765625
   f32.const 0.45962104201316833
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22309,9 +21326,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.exp
   f32.const 1.93863844871521
   f32.const 0.3568260967731476
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22322,9 +21340,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.exp
   f32.const 0.6659078598022461
   f32.const -0.38294991850852966
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22335,9 +21354,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.exp
   f32.const 1.753756046295166
   f32.const 0.44355490803718567
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22348,9 +21368,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.exp
   f32.const 2.168752908706665
   f32.const 0.24562469124794006
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22361,9 +21382,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.exp
   f32.const 0.5072436928749084
   f32.const -0.3974292278289795
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22374,9 +21396,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.exp
   f32.const 1
   f32.const 0
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22387,9 +21410,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.exp
   f32.const 1
   f32.const 0
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22400,9 +21424,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.exp
   f32.const 2.7182817459106445
   f32.const -0.3462330996990204
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22413,9 +21438,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.exp
   f32.const 0.3678794503211975
   f32.const 0.3070148527622223
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22426,9 +21452,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.exp
   f32.const inf
   f32.const 0
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22439,9 +21466,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.exp
   f32.const 0
   f32.const 0
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22452,9 +21480,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.exp
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22465,9 +21494,10 @@
    unreachable
   end
   f32.const 88.72283172607422
+  call $~lib/math/NativeMathf.exp
   f32.const 340279851902147610656242e15
   f32.const -0.09067153930664062
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22478,9 +21508,10 @@
    unreachable
   end
   f32.const 88.72283935546875
+  call $~lib/math/NativeMathf.exp
   f32.const inf
   f32.const 0
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22491,9 +21522,10 @@
    unreachable
   end
   f32.const -103.97207641601562
+  call $~lib/math/NativeMathf.exp
   f32.const 1.401298464324817e-45
   f32.const 0.49999967217445374
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22504,9 +21536,10 @@
    unreachable
   end
   f32.const -103.97208404541016
+  call $~lib/math/NativeMathf.exp
   f32.const 0
   f32.const -0.49999651312828064
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22517,9 +21550,10 @@
    unreachable
   end
   f32.const 0.3465735614299774
+  call $~lib/math/NativeMathf.exp
   f32.const 1.4142135381698608
   f32.const 0.13922421634197235
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22530,9 +21564,10 @@
    unreachable
   end
   f32.const 0.3465735912322998
+  call $~lib/math/NativeMathf.exp
   f32.const 1.4142135381698608
   f32.const -0.21432916820049286
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22543,9 +21578,10 @@
    unreachable
   end
   f32.const 0.3465736210346222
+  call $~lib/math/NativeMathf.exp
   f32.const 1.4142136573791504
   f32.const 0.43211743235588074
-  call $std/math/test_expf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22803,9 +21839,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.expm1
   f32.const -0.9996862411499023
   f32.const -0.19532723724842072
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22816,9 +21853,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.expm1
   f32.const 76.11051177978516
   f32.const -0.2875460684299469
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22829,9 +21867,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.expm1
   f32.const -0.9997709393501282
   f32.const -0.34686920046806335
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22842,9 +21881,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.expm1
   f32.const -0.9985434412956238
   f32.const -0.1281939446926117
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22855,9 +21895,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.expm1
   f32.const 10582.5634765625
   f32.const 0.45962104201316833
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22868,9 +21909,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.expm1
   f32.const 0.9386383891105652
   f32.const -0.28634780645370483
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22881,9 +21923,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.expm1
   f32.const -0.3340921103954315
   f32.const 0.23410017788410187
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22894,9 +21937,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.expm1
   f32.const 0.7537559866905212
   f32.const -0.11289017647504807
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22907,9 +21951,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.expm1
   f32.const 1.168752908706665
   f32.const 0.4912493824958801
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22920,9 +21965,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.expm1
   f32.const -0.49275627732276917
   f32.const 0.20514154434204102
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22933,9 +21979,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.expm1
   f32.const 0
   f32.const 0
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22946,9 +21993,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.expm1
   f32.const -0
   f32.const 0
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22959,9 +22007,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.expm1
   f32.const 1.718281865119934
   f32.const 0.3075338304042816
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22972,9 +22021,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.expm1
   f32.const -0.6321205496788025
   f32.const 0.15350742638111115
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22985,9 +22035,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.expm1
   f32.const inf
   f32.const 0
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -22998,9 +22049,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.expm1
   f32.const -1
   f32.const 0
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23011,9 +22063,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.expm1
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_expm1f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23479,9 +22532,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/util/math/exp2f_lut
   f32.const 3.7293792702257633e-03
   f32.const -0.0674908235669136
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23492,9 +22546,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/util/math/exp2f_lut
   f32.const 20.32579231262207
   f32.const 0.34121403098106384
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23505,9 +22560,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/util/math/exp2f_lut
   f32.const 2.9987283051013947e-03
   f32.const 0.15504619479179382
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23518,9 +22574,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/util/math/exp2f_lut
   f32.const 0.010808623395860195
   f32.const 0.2603940963745117
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23531,9 +22588,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/util/math/exp2f_lut
   f32.const 616.1156616210938
   f32.const -0.1379322111606598
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23544,9 +22602,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/util/math/exp2f_lut
   f32.const 1.5822590589523315
   f32.const -0.427890807390213
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23557,9 +22616,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/util/math/exp2f_lut
   f32.const 0.7543970942497253
   f32.const -0.38062313199043274
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23570,9 +22630,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/util/math/exp2f_lut
   f32.const 1.4760686159133911
   f32.const 0.1507442593574524
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23583,9 +22644,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/util/math/exp2f_lut
   f32.const 1.7101848125457764
   f32.const -0.39102980494499207
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23596,9 +22658,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/util/math/exp2f_lut
   f32.const 0.6247003674507141
   f32.const -0.20904375612735748
-  call $std/math/test_exp2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23908,9 +22971,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.066848754882812
   f32.const -9
-  call $std/math/test_floorf
+  f32.const -9
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23920,9 +22984,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4.345239639282227
   f32.const 4
-  call $std/math/test_floorf
+  f32.const 4
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23932,9 +22997,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.381433486938477
   f32.const -9
-  call $std/math/test_floorf
+  f32.const -9
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23944,9 +23010,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.531673431396484
   f32.const -7
-  call $std/math/test_floorf
+  f32.const -7
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23956,9 +23023,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 9.267057418823242
   f32.const 9
-  call $std/math/test_floorf
+  f32.const 9
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23968,9 +23036,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.6619858741760254
   f32.const 0
-  call $std/math/test_floorf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23980,9 +23049,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.40660393238067627
   f32.const -1
-  call $std/math/test_floorf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -23992,9 +23062,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5617597699165344
   f32.const 0
-  call $std/math/test_floorf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24004,9 +23075,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.7741522789001465
   f32.const 0
-  call $std/math/test_floorf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24016,9 +23088,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.6787636876106262
   f32.const -1
-  call $std/math/test_floorf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24030,7 +23103,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_floorf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24042,7 +23116,8 @@
   end
   f32.const inf
   f32.const inf
-  call $std/math/test_floorf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24054,7 +23129,8 @@
   end
   f32.const -inf
   f32.const -inf
-  call $std/math/test_floorf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24066,7 +23142,8 @@
   end
   f32.const 0
   f32.const 0
-  call $std/math/test_floorf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24078,7 +23155,8 @@
   end
   f32.const -0
   f32.const -0
-  call $std/math/test_floorf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24090,7 +23168,8 @@
   end
   f32.const 1
   f32.const 1
-  call $std/math/test_floorf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24102,7 +23181,8 @@
   end
   f32.const -1
   f32.const -1
-  call $std/math/test_floorf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24112,9 +23192,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const 0
-  call $std/math/test_floorf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24124,9 +23205,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const -1
-  call $std/math/test_floorf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24136,9 +23218,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.0000152587890625
   f32.const 1
-  call $std/math/test_floorf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24148,9 +23231,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.0000152587890625
   f32.const -2
-  call $std/math/test_floorf
+  f32.const -2
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24160,9 +23244,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.9999923706054688
   f32.const 0
-  call $std/math/test_floorf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24172,9 +23257,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.9999923706054688
   f32.const -1
-  call $std/math/test_floorf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24184,9 +23270,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 7.888609052210118e-31
   f32.const 0
-  call $std/math/test_floorf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24196,9 +23283,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -7.888609052210118e-31
   f32.const -1
-  call $std/math/test_floorf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24210,9 +23298,10 @@
   end
   f64.const -8.06684839057968
   f64.const 4.535662560676869
+  call $~lib/math/NativeMath.hypot
   f64.const 9.25452742288464
   f64.const -0.31188681721687317
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24224,9 +23313,10 @@
   end
   f64.const 4.345239849338305
   f64.const -8.88799136300345
+  call $~lib/math/NativeMath.hypot
   f64.const 9.893305808328252
   f64.const 0.4593673348426819
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24238,9 +23328,10 @@
   end
   f64.const -8.38143342755525
   f64.const -2.763607337379588
+  call $~lib/math/NativeMath.hypot
   f64.const 8.825301797432132
   f64.const -0.1701754331588745
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24252,9 +23343,10 @@
   end
   f64.const -6.531673581913484
   f64.const 4.567535276842744
+  call $~lib/math/NativeMath.hypot
   f64.const 7.970265885519092
   f64.const -0.3176782727241516
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24266,9 +23358,10 @@
   end
   f64.const 9.267056966972586
   f64.const 4.811392084359796
+  call $~lib/math/NativeMath.hypot
   f64.const 10.441639651824575
   f64.const -0.2693633437156677
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24280,9 +23373,10 @@
   end
   f64.const -6.450045556060236
   f64.const 0.6620717923376739
+  call $~lib/math/NativeMath.hypot
   f64.const 6.483936052542593
   f64.const 0.35618898272514343
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24294,9 +23388,10 @@
   end
   f64.const 7.858890253041697
   f64.const 0.05215452675006225
+  call $~lib/math/NativeMath.hypot
   f64.const 7.859063309581766
   f64.const 0.08044655621051788
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24308,9 +23403,10 @@
   end
   f64.const -0.792054511984896
   f64.const 7.67640268511754
+  call $~lib/math/NativeMath.hypot
   f64.const 7.717156764899584
   f64.const 0.05178084969520569
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24322,9 +23418,10 @@
   end
   f64.const 0.615702673197924
   f64.const 2.0119025790324803
+  call $~lib/math/NativeMath.hypot
   f64.const 2.104006123874314
   f64.const -0.0918039008975029
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24336,9 +23433,10 @@
   end
   f64.const -0.5587586823609152
   f64.const 0.03223983060263804
+  call $~lib/math/NativeMath.hypot
   f64.const 0.5596880129062913
   f64.const 0.1383407711982727
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24350,9 +23448,10 @@
   end
   f64.const 3
   f64.const 4
+  call $~lib/math/NativeMath.hypot
   f64.const 5
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24364,9 +23463,10 @@
   end
   f64.const -3
   f64.const 4
+  call $~lib/math/NativeMath.hypot
   f64.const 5
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24378,9 +23478,10 @@
   end
   f64.const 4
   f64.const 3
+  call $~lib/math/NativeMath.hypot
   f64.const 5
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24392,9 +23493,10 @@
   end
   f64.const 4
   f64.const -3
+  call $~lib/math/NativeMath.hypot
   f64.const 5
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24406,9 +23508,10 @@
   end
   f64.const -3
   f64.const -4
+  call $~lib/math/NativeMath.hypot
   f64.const 5
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24420,9 +23523,10 @@
   end
   f64.const 1797693134862315708145274e284
   f64.const 0
+  call $~lib/math/NativeMath.hypot
   f64.const 1797693134862315708145274e284
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24434,9 +23538,10 @@
   end
   f64.const 1797693134862315708145274e284
   f64.const -0
+  call $~lib/math/NativeMath.hypot
   f64.const 1797693134862315708145274e284
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24448,9 +23553,10 @@
   end
   f64.const 5e-324
   f64.const 0
+  call $~lib/math/NativeMath.hypot
   f64.const 5e-324
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24462,9 +23568,10 @@
   end
   f64.const 5e-324
   f64.const -0
+  call $~lib/math/NativeMath.hypot
   f64.const 5e-324
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24476,9 +23583,10 @@
   end
   f64.const inf
   f64.const 1
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24490,9 +23598,10 @@
   end
   f64.const 1
   f64.const inf
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24504,9 +23613,10 @@
   end
   f64.const inf
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24518,9 +23628,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const inf
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24532,9 +23643,10 @@
   end
   f64.const -inf
   f64.const 1
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24546,9 +23658,10 @@
   end
   f64.const 1
   f64.const -inf
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24560,9 +23673,10 @@
   end
   f64.const -inf
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24574,9 +23688,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const -inf
+  call $~lib/math/NativeMath.hypot
   f64.const inf
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24588,9 +23703,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const 1
+  call $~lib/math/NativeMath.hypot
   f64.const nan:0x8000000000000
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24602,9 +23718,10 @@
   end
   f64.const 1
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.hypot
   f64.const nan:0x8000000000000
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24616,9 +23733,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const 0
+  call $~lib/math/NativeMath.hypot
   f64.const nan:0x8000000000000
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24630,9 +23748,10 @@
   end
   f64.const 0
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.hypot
   f64.const nan:0x8000000000000
   f64.const 0
-  call $std/math/test_hypot
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -24644,9 +23763,10 @@
   end
   f32.const -8.066848754882812
   f32.const 4.535662651062012
+  call $~lib/math/NativeMathf.hypot
   f32.const 9.254528045654297
   f32.const 0.2735958993434906
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24658,9 +23778,10 @@
   end
   f32.const 4.345239639282227
   f32.const -8.887990951538086
+  call $~lib/math/NativeMathf.hypot
   f32.const 9.893305778503418
   f32.const 0.4530770778656006
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24672,9 +23793,10 @@
   end
   f32.const -8.381433486938477
   f32.const -2.7636072635650635
+  call $~lib/math/NativeMathf.hypot
   f32.const 8.825302124023438
   f32.const 0.30755728483200073
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24686,9 +23808,10 @@
   end
   f32.const -6.531673431396484
   f32.const 4.567535400390625
+  call $~lib/math/NativeMathf.hypot
   f32.const 7.970265865325928
   f32.const 0.06785223633050919
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24700,9 +23823,10 @@
   end
   f32.const 9.267057418823242
   f32.const 4.811392307281494
+  call $~lib/math/NativeMathf.hypot
   f32.const 10.44163990020752
   f32.const -0.26776307821273804
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24714,9 +23838,10 @@
   end
   f32.const -6.450045585632324
   f32.const 0.6620717644691467
+  call $~lib/math/NativeMathf.hypot
   f32.const 6.483936309814453
   f32.const 0.48381292819976807
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24728,9 +23853,10 @@
   end
   f32.const 7.858890056610107
   f32.const 0.052154526114463806
+  call $~lib/math/NativeMathf.hypot
   f32.const 7.859063148498535
   f32.const 0.07413065433502197
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24742,9 +23868,10 @@
   end
   f32.const -0.7920545339584351
   f32.const 7.676402568817139
+  call $~lib/math/NativeMathf.hypot
   f32.const 7.717156887054443
   f32.const 0.4940592646598816
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24756,9 +23883,10 @@
   end
   f32.const 0.6157026886940002
   f32.const 2.0119025707244873
+  call $~lib/math/NativeMathf.hypot
   f32.const 2.104006052017212
   f32.const -0.287089467048645
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24770,9 +23898,10 @@
   end
   f32.const -0.5587586760520935
   f32.const 0.03223983198404312
+  call $~lib/math/NativeMathf.hypot
   f32.const 0.5596880316734314
   f32.const 0.4191940724849701
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24784,9 +23913,10 @@
   end
   f32.const 3
   f32.const 4
+  call $~lib/math/NativeMathf.hypot
   f32.const 5
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24798,9 +23928,10 @@
   end
   f32.const -3
   f32.const 4
+  call $~lib/math/NativeMathf.hypot
   f32.const 5
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24812,9 +23943,10 @@
   end
   f32.const 4
   f32.const 3
+  call $~lib/math/NativeMathf.hypot
   f32.const 5
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24826,9 +23958,10 @@
   end
   f32.const 4
   f32.const -3
+  call $~lib/math/NativeMathf.hypot
   f32.const 5
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24840,9 +23973,10 @@
   end
   f32.const -3
   f32.const -4
+  call $~lib/math/NativeMathf.hypot
   f32.const 5
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24854,9 +23988,10 @@
   end
   f32.const 3402823466385288598117041e14
   f32.const 0
+  call $~lib/math/NativeMathf.hypot
   f32.const 3402823466385288598117041e14
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24868,9 +24003,10 @@
   end
   f32.const 3402823466385288598117041e14
   f32.const -0
+  call $~lib/math/NativeMathf.hypot
   f32.const 3402823466385288598117041e14
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24882,9 +24018,10 @@
   end
   f32.const 1.401298464324817e-45
   f32.const 0
+  call $~lib/math/NativeMathf.hypot
   f32.const 1.401298464324817e-45
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24896,9 +24033,10 @@
   end
   f32.const 1.401298464324817e-45
   f32.const -0
+  call $~lib/math/NativeMathf.hypot
   f32.const 1.401298464324817e-45
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24910,9 +24048,10 @@
   end
   f32.const inf
   f32.const 1
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24924,9 +24063,10 @@
   end
   f32.const 1
   f32.const inf
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24938,9 +24078,10 @@
   end
   f32.const inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24952,9 +24093,10 @@
   end
   f32.const nan:0x400000
   f32.const inf
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24966,9 +24108,10 @@
   end
   f32.const -inf
   f32.const 1
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24980,9 +24123,10 @@
   end
   f32.const 1
   f32.const -inf
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -24994,9 +24138,10 @@
   end
   f32.const -inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25008,9 +24153,10 @@
   end
   f32.const nan:0x400000
   f32.const -inf
+  call $~lib/math/NativeMathf.hypot
   f32.const inf
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25022,9 +24168,10 @@
   end
   f32.const nan:0x400000
   f32.const 1
+  call $~lib/math/NativeMathf.hypot
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25036,9 +24183,10 @@
   end
   f32.const 1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.hypot
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_hypotf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25283,8 +24431,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.log
   f32.const -inf
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25295,8 +24445,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.log
   f32.const -inf
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25307,8 +24459,10 @@
    unreachable
   end
   f32.const -7.888609052210118e-31
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25319,8 +24473,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.log
   f32.const 0
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25331,8 +24487,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25343,8 +24501,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.log
   f32.const inf
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25355,8 +24515,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25367,8 +24529,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25379,8 +24543,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.log
   f32.const -inf
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25391,8 +24557,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.log
   f32.const -inf
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25403,8 +24571,10 @@
    unreachable
   end
   f32.const -7.888609052210118e-31
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25415,8 +24585,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.log
+  f32.const 0
   f32.const 0
-  call $std/math/test_logf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25427,8 +24599,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25439,8 +24613,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.log
   f32.const inf
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25451,8 +24627,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25463,8 +24641,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.log
   f32.const nan:0x400000
-  call $std/math/test_logf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25709,9 +24889,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25722,9 +24903,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.log10
   f32.const 0.6380137205123901
   f32.const -0.20476758480072021
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25735,9 +24917,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25748,9 +24931,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25761,9 +24945,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.log10
   f32.const 0.9669418334960938
   f32.const -0.34273025393486023
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25774,9 +24959,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.log10
   f32.const -0.1791512817144394
   f32.const -0.27078554034233093
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25787,9 +24973,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25800,9 +24987,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.log10
   f32.const -0.25044935941696167
   f32.const 0.2126826047897339
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25813,9 +25001,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.log10
   f32.const -0.1111735999584198
   f32.const 0.46515095233917236
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25826,9 +25015,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25839,9 +25029,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.log10
   f32.const -inf
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25852,9 +25043,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.log10
   f32.const -inf
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25865,9 +25057,10 @@
    unreachable
   end
   f32.const -7.888609052210118e-31
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25878,9 +25071,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.log10
   f32.const 0
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25891,9 +25085,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25904,9 +25099,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.log10
   f32.const inf
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25917,9 +25113,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -25930,9 +25127,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.log10
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log10f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26177,9 +25375,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.log1p
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26190,9 +25389,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.log1p
   f32.const 1.676206350326538
   f32.const -0.23014859855175018
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26203,9 +25403,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.log1p
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26216,9 +25417,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.log1p
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26229,9 +25431,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.log1p
   f32.const 2.3289403915405273
   f32.const -0.29075589776039124
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26242,9 +25445,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.log1p
   f32.const 0.5080131888389587
   f32.const -0.1386766880750656
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26255,9 +25459,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.log1p
   f32.const -0.5218932032585144
   f32.const -0.08804433047771454
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26268,9 +25473,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.log1p
   f32.const 0.44581323862075806
   f32.const -0.15101368725299835
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26281,9 +25487,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.log1p
   f32.const 0.5733227133750916
   f32.const -0.10264533013105392
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26294,9 +25501,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.log1p
   f32.const -1.1355782747268677
   f32.const -0.19879481196403503
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26307,9 +25515,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.log1p
   f32.const 0
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26320,9 +25529,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.log1p
   f32.const -0
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26333,9 +25543,10 @@
    unreachable
   end
   f32.const -7.888609052210118e-31
+  call $~lib/math/NativeMathf.log1p
   f32.const -7.888609052210118e-31
   f32.const 3.308722450212111e-24
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26346,9 +25557,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.log1p
   f32.const 0.6931471824645996
   f32.const 0.031954795122146606
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26359,9 +25571,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.log1p
   f32.const -inf
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26372,9 +25585,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.log1p
   f32.const inf
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26385,9 +25599,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.log1p
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26398,9 +25613,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.log1p
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26411,9 +25627,10 @@
    unreachable
   end
   f32.const -1.1754942106924411e-38
+  call $~lib/math/NativeMathf.log1p
   f32.const -1.1754942106924411e-38
   f32.const 4.930380657631324e-32
-  call $std/math/test_log1pf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26658,9 +25875,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26671,9 +25889,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.log2
   f32.const 2.1194357872009277
   f32.const 0.18271538615226746
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26684,9 +25903,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26697,9 +25917,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26710,9 +25931,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.log2
   f32.const 3.212111234664917
   f32.const -0.3188050389289856
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26723,9 +25945,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.log2
   f32.const -0.5951276421546936
   f32.const 0.34231460094451904
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26736,9 +25959,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26749,9 +25973,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.log2
   f32.const -0.8319748044013977
   f32.const -0.33473604917526245
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26762,9 +25987,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.log2
   f32.const -0.3693107068538666
   f32.const 0.3278401792049408
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26775,9 +26001,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26788,9 +26015,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.log2
   f32.const -inf
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26801,9 +26029,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.log2
   f32.const -inf
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26814,9 +26043,10 @@
    unreachable
   end
   f32.const -7.888609052210118e-31
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26827,9 +26057,10 @@
    unreachable
   end
   f32.const 1
+  call $~lib/math/NativeMathf.log2
   f32.const 0
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26840,9 +26071,10 @@
    unreachable
   end
   f32.const -1
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26853,9 +26085,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.log2
   f32.const inf
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26866,9 +26099,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -26879,9 +26113,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.log2
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_log2f
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27775,10 +27010,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.066848754882812
   f32.const 4.535662651062012
   f32.const 4.535662651062012
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27789,9 +27024,9 @@
    unreachable
   end
   f32.const 4.345239639282227
-  f32.const -8.887990951538086
   f32.const 4.345239639282227
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27801,10 +27036,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.381433486938477
   f32.const -2.7636072635650635
   f32.const -2.7636072635650635
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27814,10 +27049,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.531673431396484
   f32.const 4.567535400390625
   f32.const 4.567535400390625
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27828,9 +27063,9 @@
    unreachable
   end
   f32.const 9.267057418823242
-  f32.const 4.811392307281494
   f32.const 9.267057418823242
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27840,10 +27075,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.450045585632324
   f32.const 0.6620717644691467
   f32.const 0.6620717644691467
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27854,9 +27089,9 @@
    unreachable
   end
   f32.const 7.858890056610107
-  f32.const 0.052154526114463806
   f32.const 7.858890056610107
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27866,10 +27101,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.7920545339584351
   f32.const 7.676402568817139
   f32.const 7.676402568817139
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27879,10 +27114,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.6157026886940002
   f32.const 2.0119025707244873
   f32.const 2.0119025707244873
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27892,10 +27127,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5587586760520935
   f32.const 0.03223983198404312
   f32.const 0.03223983198404312
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27905,10 +27140,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0
   f32.const 1
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27918,10 +27153,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const 1
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27931,10 +27166,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const 1
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27944,10 +27179,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const 1
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27959,8 +27194,8 @@
   end
   f32.const 1
   f32.const 1
-  f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27970,10 +27205,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const 1
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27984,9 +27219,9 @@
    unreachable
   end
   f32.const inf
-  f32.const 1
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -27996,10 +27231,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const 1
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28010,9 +27245,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const 1
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28023,9 +27258,9 @@
    unreachable
   end
   f32.const 0
-  f32.const -1
   f32.const 0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28036,9 +27271,9 @@
    unreachable
   end
   f32.const -0
-  f32.const -1
   f32.const -0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28049,9 +27284,9 @@
    unreachable
   end
   f32.const 0.5
-  f32.const -1
   f32.const 0.5
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28062,9 +27297,9 @@
    unreachable
   end
   f32.const -0.5
-  f32.const -1
   f32.const -0.5
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28075,9 +27310,9 @@
    unreachable
   end
   f32.const 1
-  f32.const -1
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28089,8 +27324,8 @@
   end
   f32.const -1
   f32.const -1
-  f32.const -1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28101,9 +27336,9 @@
    unreachable
   end
   f32.const inf
-  f32.const -1
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28113,10 +27348,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const -1
   f32.const -1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28127,9 +27362,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const -1
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28142,7 +27377,7 @@
   f32.const 0
   f32.const 0
   f32.const 0
-  call $std/math/test_maxf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28153,9 +27388,9 @@
    unreachable
   end
   f32.const 0
-  f32.const -0
   f32.const 0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28165,10 +27400,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0
   f32.const inf
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28179,9 +27414,9 @@
    unreachable
   end
   f32.const 0
-  f32.const -inf
   f32.const 0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28191,10 +27426,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28204,10 +27439,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const 0
   f32.const 0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28219,8 +27454,8 @@
   end
   f32.const -0
   f32.const -0
-  f32.const -0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28230,10 +27465,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const inf
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28244,9 +27479,9 @@
    unreachable
   end
   f32.const -0
-  f32.const -inf
   f32.const -0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28256,10 +27491,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28270,9 +27505,9 @@
    unreachable
   end
   f32.const 1
-  f32.const 0
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28282,10 +27517,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const 0
   f32.const 0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28296,9 +27531,9 @@
    unreachable
   end
   f32.const inf
-  f32.const 0
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28308,10 +27543,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const 0
   f32.const 0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28322,9 +27557,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const 0
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28334,10 +27569,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const -0
   f32.const -0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28348,9 +27583,9 @@
    unreachable
   end
   f32.const inf
-  f32.const -0
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28360,10 +27595,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const -0
   f32.const -0
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28374,9 +27609,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const -0
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28387,9 +27622,9 @@
    unreachable
   end
   f32.const inf
-  f32.const 2
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28400,9 +27635,9 @@
    unreachable
   end
   f32.const inf
-  f32.const -0.5
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28412,10 +27647,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28425,10 +27660,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const 2
   f32.const 2
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28438,10 +27673,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const -0.5
   f32.const -0.5
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28451,10 +27686,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28466,8 +27701,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28477,10 +27712,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28490,10 +27725,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28503,10 +27738,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1
   f32.const inf
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28516,10 +27751,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const inf
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28531,8 +27766,8 @@
   end
   f32.const inf
   f32.const inf
-  f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28542,10 +27777,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const inf
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28556,9 +27791,9 @@
    unreachable
   end
   f32.const 1
-  f32.const -inf
   f32.const 1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28569,9 +27804,9 @@
    unreachable
   end
   f32.const -1
-  f32.const -inf
   f32.const -1
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28582,9 +27817,9 @@
    unreachable
   end
   f32.const inf
-  f32.const -inf
   f32.const inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28596,8 +27831,8 @@
   end
   f32.const -inf
   f32.const -inf
-  f32.const -inf
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28608,9 +27843,9 @@
    unreachable
   end
   f32.const 1.75
-  f32.const 0.5
   f32.const 1.75
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28620,10 +27855,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.75
   f32.const 0.5
   f32.const 0.5
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28634,9 +27869,9 @@
    unreachable
   end
   f32.const 1.75
-  f32.const -0.5
   f32.const 1.75
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -28646,10 +27881,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.75
   f32.const -0.5
   f32.const -0.5
-  call $std/math/test_maxf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29544,9 +28779,9 @@
    unreachable
   end
   f32.const -8.066848754882812
-  f32.const 4.535662651062012
   f32.const -8.066848754882812
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29556,10 +28791,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4.345239639282227
   f32.const -8.887990951538086
   f32.const -8.887990951538086
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29570,9 +28805,9 @@
    unreachable
   end
   f32.const -8.381433486938477
-  f32.const -2.7636072635650635
   f32.const -8.381433486938477
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29583,9 +28818,9 @@
    unreachable
   end
   f32.const -6.531673431396484
-  f32.const 4.567535400390625
   f32.const -6.531673431396484
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29595,10 +28830,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 9.267057418823242
   f32.const 4.811392307281494
   f32.const 4.811392307281494
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29609,9 +28844,9 @@
    unreachable
   end
   f32.const -6.450045585632324
-  f32.const 0.6620717644691467
   f32.const -6.450045585632324
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29621,10 +28856,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 7.858890056610107
   f32.const 0.052154526114463806
   f32.const 0.052154526114463806
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29635,9 +28870,9 @@
    unreachable
   end
   f32.const -0.7920545339584351
-  f32.const 7.676402568817139
   f32.const -0.7920545339584351
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29648,9 +28883,9 @@
    unreachable
   end
   f32.const 0.6157026886940002
-  f32.const 2.0119025707244873
   f32.const 0.6157026886940002
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29661,9 +28896,9 @@
    unreachable
   end
   f32.const -0.5587586760520935
-  f32.const 0.03223983198404312
   f32.const -0.5587586760520935
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29674,9 +28909,9 @@
    unreachable
   end
   f32.const 0
-  f32.const 1
   f32.const 0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29687,9 +28922,9 @@
    unreachable
   end
   f32.const -0
-  f32.const 1
   f32.const -0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29700,9 +28935,9 @@
    unreachable
   end
   f32.const 0.5
-  f32.const 1
   f32.const 0.5
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29713,9 +28948,9 @@
    unreachable
   end
   f32.const -0.5
-  f32.const 1
   f32.const -0.5
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29727,8 +28962,8 @@
   end
   f32.const 1
   f32.const 1
-  f32.const 1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29739,9 +28974,9 @@
    unreachable
   end
   f32.const -1
-  f32.const 1
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29751,10 +28986,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const 1
   f32.const 1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29765,9 +29000,9 @@
    unreachable
   end
   f32.const -inf
-  f32.const 1
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29778,9 +29013,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const 1
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29790,10 +29025,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0
   f32.const -1
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29803,10 +29038,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const -1
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29816,10 +29051,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const -1
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29829,10 +29064,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const -1
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29842,10 +29077,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1
   f32.const -1
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29857,8 +29092,8 @@
   end
   f32.const -1
   f32.const -1
-  f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29868,10 +29103,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const -1
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29882,9 +29117,9 @@
    unreachable
   end
   f32.const -inf
-  f32.const -1
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29895,9 +29130,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const -1
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29910,7 +29145,7 @@
   f32.const 0
   f32.const 0
   f32.const 0
-  call $std/math/test_minf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29920,10 +29155,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0
   f32.const -0
   f32.const -0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29934,9 +29169,9 @@
    unreachable
   end
   f32.const 0
-  f32.const inf
   f32.const 0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29946,10 +29181,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0
   f32.const -inf
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29959,10 +29194,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29973,9 +29208,9 @@
    unreachable
   end
   f32.const -0
-  f32.const 0
   f32.const -0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29987,8 +29222,8 @@
   end
   f32.const -0
   f32.const -0
-  f32.const -0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -29999,9 +29234,9 @@
    unreachable
   end
   f32.const -0
-  f32.const inf
   f32.const -0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30011,10 +29246,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const -inf
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30024,10 +29259,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30037,10 +29272,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1
   f32.const 0
   f32.const 0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30051,9 +29286,9 @@
    unreachable
   end
   f32.const -1
-  f32.const 0
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30063,10 +29298,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const 0
   f32.const 0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30077,9 +29312,9 @@
    unreachable
   end
   f32.const -inf
-  f32.const 0
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30090,9 +29325,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const 0
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30103,9 +29338,9 @@
    unreachable
   end
   f32.const -1
-  f32.const -0
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30115,10 +29350,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const -0
   f32.const -0
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30129,9 +29364,9 @@
    unreachable
   end
   f32.const -inf
-  f32.const -0
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30142,9 +29377,9 @@
    unreachable
   end
   f32.const nan:0x400000
-  f32.const -0
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30154,10 +29389,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const 2
   f32.const 2
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30167,10 +29402,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const -0.5
   f32.const -0.5
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30180,10 +29415,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30194,9 +29429,9 @@
    unreachable
   end
   f32.const -inf
-  f32.const 2
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30207,9 +29442,9 @@
    unreachable
   end
   f32.const -inf
-  f32.const -0.5
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30219,10 +29454,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30234,8 +29469,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30245,10 +29480,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30258,10 +29493,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30272,9 +29507,9 @@
    unreachable
   end
   f32.const 1
-  f32.const inf
   f32.const 1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30285,9 +29520,9 @@
    unreachable
   end
   f32.const -1
-  f32.const inf
   f32.const -1
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30299,8 +29534,8 @@
   end
   f32.const inf
   f32.const inf
-  f32.const inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30311,9 +29546,9 @@
    unreachable
   end
   f32.const -inf
-  f32.const inf
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30323,10 +29558,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1
   f32.const -inf
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30336,10 +29571,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
   f32.const -inf
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30349,10 +29584,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const inf
   f32.const -inf
   f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30364,8 +29599,8 @@
   end
   f32.const -inf
   f32.const -inf
-  f32.const -inf
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30375,10 +29610,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.75
   f32.const 0.5
   f32.const 0.5
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30389,9 +29624,9 @@
    unreachable
   end
   f32.const -1.75
-  f32.const 0.5
   f32.const -1.75
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30401,10 +29636,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.75
   f32.const -0.5
   f32.const -0.5
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -30415,9 +29650,9 @@
    unreachable
   end
   f32.const -1.75
-  f32.const -0.5
   f32.const -1.75
-  call $std/math/test_minf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32223,8 +31458,10 @@
   end
   f32.const -8.066848754882812
   f32.const 4.535662651062012
+  call $~lib/math/NativeMathf.mod
   f32.const -3.531186103820801
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32236,8 +31473,10 @@
   end
   f32.const 4.345239639282227
   f32.const -8.887990951538086
+  call $~lib/math/NativeMathf.mod
   f32.const 4.345239639282227
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32249,8 +31488,10 @@
   end
   f32.const -8.381433486938477
   f32.const -2.7636072635650635
+  call $~lib/math/NativeMathf.mod
   f32.const -0.09061169624328613
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32262,8 +31503,10 @@
   end
   f32.const -6.531673431396484
   f32.const 4.567535400390625
+  call $~lib/math/NativeMathf.mod
   f32.const -1.9641380310058594
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32275,8 +31518,10 @@
   end
   f32.const 9.267057418823242
   f32.const 4.811392307281494
+  call $~lib/math/NativeMathf.mod
   f32.const 4.455665111541748
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32288,8 +31533,10 @@
   end
   f32.const -6.450045585632324
   f32.const 0.6620717644691467
+  call $~lib/math/NativeMathf.mod
   f32.const -0.49139970541000366
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32301,8 +31548,10 @@
   end
   f32.const 7.858890056610107
   f32.const 0.052154526114463806
+  call $~lib/math/NativeMathf.mod
   f32.const 0.0357111394405365
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32314,8 +31563,10 @@
   end
   f32.const -0.7920545339584351
   f32.const 7.676402568817139
+  call $~lib/math/NativeMathf.mod
   f32.const -0.7920545339584351
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32327,8 +31578,10 @@
   end
   f32.const 0.6157026886940002
   f32.const 2.0119025707244873
+  call $~lib/math/NativeMathf.mod
   f32.const 0.6157026886940002
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32340,8 +31593,10 @@
   end
   f32.const -0.5587586760520935
   f32.const 0.03223983198404312
+  call $~lib/math/NativeMathf.mod
   f32.const -0.010681532323360443
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32353,8 +31608,10 @@
   end
   f32.const 0
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const 0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32366,8 +31623,10 @@
   end
   f32.const -0
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32379,8 +31638,10 @@
   end
   f32.const 0.5
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const 0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32392,8 +31653,10 @@
   end
   f32.const -0.5
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const -0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32405,8 +31668,10 @@
   end
   f32.const 1
   f32.const 1
+  call $~lib/math/NativeMathf.mod
+  f32.const 0
   f32.const 0
-  call $std/math/test_modf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32418,8 +31683,10 @@
   end
   f32.const -1
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32431,8 +31698,10 @@
   end
   f32.const 1.5
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const 0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32444,8 +31713,10 @@
   end
   f32.const -1.5
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const -0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32457,8 +31728,10 @@
   end
   f32.const 2
   f32.const 1
+  call $~lib/math/NativeMathf.mod
+  f32.const 0
   f32.const 0
-  call $std/math/test_modf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32470,8 +31743,10 @@
   end
   f32.const -2
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32483,8 +31758,10 @@
   end
   f32.const inf
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32496,8 +31773,10 @@
   end
   f32.const -inf
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32509,8 +31788,10 @@
   end
   f32.const nan:0x400000
   f32.const 1
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32522,8 +31803,10 @@
   end
   f32.const 0
   f32.const -1
+  call $~lib/math/NativeMathf.mod
+  f32.const 0
   f32.const 0
-  call $std/math/test_modf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32535,8 +31818,10 @@
   end
   f32.const -0
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32548,8 +31833,10 @@
   end
   f32.const 0.5
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const 0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32561,8 +31848,10 @@
   end
   f32.const -0.5
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const -0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32574,8 +31863,10 @@
   end
   f32.const 1
   f32.const -1
+  call $~lib/math/NativeMathf.mod
+  f32.const 0
   f32.const 0
-  call $std/math/test_modf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32587,8 +31878,10 @@
   end
   f32.const -1
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32600,8 +31893,10 @@
   end
   f32.const 1.5
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const 0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32613,8 +31908,10 @@
   end
   f32.const -1.5
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const -0.5
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32626,8 +31923,10 @@
   end
   f32.const 2
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const 0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32639,8 +31938,10 @@
   end
   f32.const -2
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32652,8 +31953,10 @@
   end
   f32.const inf
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32665,8 +31968,10 @@
   end
   f32.const -inf
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32678,8 +31983,10 @@
   end
   f32.const nan:0x400000
   f32.const -1
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32691,8 +31998,10 @@
   end
   f32.const 0
   f32.const 0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32704,8 +32013,10 @@
   end
   f32.const 0
   f32.const -0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32717,8 +32028,10 @@
   end
   f32.const 0
   f32.const inf
+  call $~lib/math/NativeMathf.mod
   f32.const 0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32730,8 +32043,10 @@
   end
   f32.const 0
   f32.const -inf
+  call $~lib/math/NativeMathf.mod
   f32.const 0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32743,8 +32058,10 @@
   end
   f32.const 0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32756,8 +32073,10 @@
   end
   f32.const -0
   f32.const 0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32769,8 +32088,10 @@
   end
   f32.const -0
   f32.const -0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32782,8 +32103,10 @@
   end
   f32.const -0
   f32.const inf
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32795,8 +32118,10 @@
   end
   f32.const -0
   f32.const -inf
+  call $~lib/math/NativeMathf.mod
   f32.const -0
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32808,8 +32133,10 @@
   end
   f32.const -0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32821,8 +32148,10 @@
   end
   f32.const 1
   f32.const 0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32834,8 +32163,10 @@
   end
   f32.const -1
   f32.const 0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32847,8 +32178,10 @@
   end
   f32.const inf
   f32.const 0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32860,8 +32193,10 @@
   end
   f32.const -inf
   f32.const 0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32873,8 +32208,10 @@
   end
   f32.const nan:0x400000
   f32.const 0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32886,8 +32223,10 @@
   end
   f32.const -1
   f32.const -0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32899,8 +32238,10 @@
   end
   f32.const inf
   f32.const -0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32912,8 +32253,10 @@
   end
   f32.const -inf
   f32.const -0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32925,8 +32268,10 @@
   end
   f32.const nan:0x400000
   f32.const -0
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32938,8 +32283,10 @@
   end
   f32.const inf
   f32.const 2
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32951,8 +32298,10 @@
   end
   f32.const inf
   f32.const -0.5
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32964,8 +32313,10 @@
   end
   f32.const inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32977,8 +32328,10 @@
   end
   f32.const -inf
   f32.const 2
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -32990,8 +32343,10 @@
   end
   f32.const -inf
   f32.const -0.5
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33003,8 +32358,10 @@
   end
   f32.const -inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33016,8 +32373,10 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33029,8 +32388,10 @@
   end
   f32.const 1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33042,8 +32403,10 @@
   end
   f32.const -1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33055,8 +32418,10 @@
   end
   f32.const 1
   f32.const inf
+  call $~lib/math/NativeMathf.mod
   f32.const 1
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33068,8 +32433,10 @@
   end
   f32.const -1
   f32.const inf
+  call $~lib/math/NativeMathf.mod
   f32.const -1
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33081,8 +32448,10 @@
   end
   f32.const inf
   f32.const inf
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33094,8 +32463,10 @@
   end
   f32.const -inf
   f32.const inf
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33107,8 +32478,10 @@
   end
   f32.const 1
   f32.const -inf
+  call $~lib/math/NativeMathf.mod
   f32.const 1
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33120,8 +32493,10 @@
   end
   f32.const -1
   f32.const -inf
+  call $~lib/math/NativeMathf.mod
   f32.const -1
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33133,8 +32508,10 @@
   end
   f32.const inf
   f32.const -inf
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33146,8 +32523,10 @@
   end
   f32.const -inf
   f32.const -inf
+  call $~lib/math/NativeMathf.mod
   f32.const nan:0x400000
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33159,8 +32538,10 @@
   end
   f32.const 1.75
   f32.const 0.5
+  call $~lib/math/NativeMathf.mod
   f32.const 0.25
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33172,8 +32553,10 @@
   end
   f32.const -1.75
   f32.const 0.5
+  call $~lib/math/NativeMathf.mod
   f32.const -0.25
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33185,8 +32568,10 @@
   end
   f32.const 1.75
   f32.const -0.5
+  call $~lib/math/NativeMathf.mod
   f32.const 0.25
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -33198,8 +32583,10 @@
   end
   f32.const -1.75
   f32.const -0.5
+  call $~lib/math/NativeMathf.mod
   f32.const -0.25
-  call $std/math/test_modf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35138,9 +34525,10 @@
   end
   f32.const -8.066848754882812
   f32.const 4.535662651062012
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35152,9 +34540,10 @@
   end
   f32.const 4.345239639282227
   f32.const -8.887990951538086
+  call $~lib/math/NativeMathf.pow
   f32.const 2.134714122803416e-06
   f32.const 0.1436440795660019
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35166,9 +34555,10 @@
   end
   f32.const -8.381433486938477
   f32.const -2.7636072635650635
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35180,9 +34570,10 @@
   end
   f32.const -6.531673431396484
   f32.const 4.567535400390625
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35194,9 +34585,10 @@
   end
   f32.const 9.267057418823242
   f32.const 4.811392307281494
+  call $~lib/math/NativeMathf.pow
   f32.const 44909.33203125
   f32.const -0.05356409028172493
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35208,9 +34600,10 @@
   end
   f32.const -6.450045585632324
   f32.const 0.6620717644691467
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35222,9 +34615,10 @@
   end
   f32.const 7.858890056610107
   f32.const 0.052154526114463806
+  call $~lib/math/NativeMathf.pow
   f32.const 1.1135177612304688
   f32.const 0.19122089445590973
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35236,9 +34630,10 @@
   end
   f32.const -0.7920545339584351
   f32.const 7.676402568817139
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35250,9 +34645,10 @@
   end
   f32.const 0.6157026886940002
   f32.const 2.0119025707244873
+  call $~lib/math/NativeMathf.pow
   f32.const 0.3769077658653259
   f32.const 0.337149053812027
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35264,9 +34660,10 @@
   end
   f32.const -0.5587586760520935
   f32.const 0.03223983198404312
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35278,9 +34675,10 @@
   end
   f32.const 0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35292,9 +34690,10 @@
   end
   f32.const 0
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35306,9 +34705,10 @@
   end
   f32.const 0
   f32.const 3
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35320,9 +34720,10 @@
   end
   f32.const 0
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35334,9 +34735,10 @@
   end
   f32.const 0
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35348,9 +34750,10 @@
   end
   f32.const 0
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35362,9 +34765,10 @@
   end
   f32.const 0
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35376,9 +34780,10 @@
   end
   f32.const 0
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35390,9 +34795,10 @@
   end
   f32.const 0
   f32.const -0.5
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35404,9 +34810,10 @@
   end
   f32.const 0
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35418,9 +34825,10 @@
   end
   f32.const 0
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35432,9 +34840,10 @@
   end
   f32.const 0
   f32.const -3
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35446,9 +34855,10 @@
   end
   f32.const 0
   f32.const -4
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35460,9 +34870,10 @@
   end
   f32.const 0
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35474,9 +34885,10 @@
   end
   f32.const -0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35488,9 +34900,10 @@
   end
   f32.const -0
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35502,9 +34915,10 @@
   end
   f32.const -0
   f32.const 3
+  call $~lib/math/NativeMathf.pow
   f32.const -0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35516,9 +34930,10 @@
   end
   f32.const -0
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35530,9 +34945,10 @@
   end
   f32.const -0
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const -0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35544,9 +34960,10 @@
   end
   f32.const -0
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35558,9 +34975,10 @@
   end
   f32.const -0
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35572,9 +34990,10 @@
   end
   f32.const -0
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35586,9 +35005,10 @@
   end
   f32.const -0
   f32.const -0.5
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35600,9 +35020,10 @@
   end
   f32.const -0
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35614,9 +35035,10 @@
   end
   f32.const -0
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35628,9 +35050,10 @@
   end
   f32.const -0
   f32.const -3
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35642,9 +35065,10 @@
   end
   f32.const -0
   f32.const -4
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35656,9 +35080,10 @@
   end
   f32.const -0
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35670,9 +35095,10 @@
   end
   f32.const nan:0x400000
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35684,9 +35110,10 @@
   end
   f32.const inf
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35698,9 +35125,10 @@
   end
   f32.const -inf
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35712,9 +35140,10 @@
   end
   f32.const 1
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35726,9 +35155,10 @@
   end
   f32.const -1
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35740,9 +35170,10 @@
   end
   f32.const -0.5
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35754,9 +35185,10 @@
   end
   f32.const nan:0x400000
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35768,9 +35200,10 @@
   end
   f32.const inf
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35782,9 +35215,10 @@
   end
   f32.const -inf
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35796,9 +35230,10 @@
   end
   f32.const 1
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35810,9 +35245,10 @@
   end
   f32.const -1
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35824,9 +35260,10 @@
   end
   f32.const -0.5
   f32.const -0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35838,9 +35275,10 @@
   end
   f32.const -1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35852,9 +35290,10 @@
   end
   f32.const -1
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35866,9 +35305,10 @@
   end
   f32.const -1
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35880,9 +35320,10 @@
   end
   f32.const -1
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35894,9 +35335,10 @@
   end
   f32.const -1
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const -1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35908,9 +35350,10 @@
   end
   f32.const -1
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35922,9 +35365,10 @@
   end
   f32.const -1
   f32.const -3
+  call $~lib/math/NativeMathf.pow
   f32.const -1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35936,9 +35380,10 @@
   end
   f32.const -1
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35950,9 +35395,10 @@
   end
   f32.const 1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35964,9 +35410,10 @@
   end
   f32.const 1
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35978,9 +35425,10 @@
   end
   f32.const 1
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -35992,9 +35440,10 @@
   end
   f32.const 1
   f32.const 3
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36006,9 +35455,10 @@
   end
   f32.const 1
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36020,9 +35470,10 @@
   end
   f32.const 1
   f32.const -0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36034,9 +35485,10 @@
   end
   f32.const 1
   f32.const -3
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36048,9 +35500,10 @@
   end
   f32.const -0.5
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36062,9 +35515,10 @@
   end
   f32.const -0.5
   f32.const 1.5
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36076,9 +35530,10 @@
   end
   f32.const -0.5
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 0.25
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36090,9 +35545,10 @@
   end
   f32.const -0.5
   f32.const 3
+  call $~lib/math/NativeMathf.pow
   f32.const -0.125
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36104,9 +35560,10 @@
   end
   f32.const -0.5
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36118,9 +35575,10 @@
   end
   f32.const -0.5
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36132,9 +35590,10 @@
   end
   f32.const -0.5
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36146,9 +35605,10 @@
   end
   f32.const 0.5
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36160,9 +35620,10 @@
   end
   f32.const 0.5
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36174,9 +35635,10 @@
   end
   f32.const 0.5
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36188,9 +35650,10 @@
   end
   f32.const 1.5
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36202,9 +35665,10 @@
   end
   f32.const 1.5
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36216,9 +35680,10 @@
   end
   f32.const 1.5
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36230,9 +35695,10 @@
   end
   f32.const inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36244,9 +35710,10 @@
   end
   f32.const inf
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36258,9 +35725,10 @@
   end
   f32.const inf
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36272,9 +35740,10 @@
   end
   f32.const inf
   f32.const 3
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36286,9 +35755,10 @@
   end
   f32.const inf
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36300,9 +35770,10 @@
   end
   f32.const inf
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36314,9 +35785,10 @@
   end
   f32.const inf
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36328,9 +35800,10 @@
   end
   f32.const inf
   f32.const -0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36342,9 +35815,10 @@
   end
   f32.const inf
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36356,9 +35830,10 @@
   end
   f32.const inf
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36370,9 +35845,10 @@
   end
   f32.const -inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36384,9 +35860,10 @@
   end
   f32.const -inf
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36398,9 +35875,10 @@
   end
   f32.const -inf
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36412,9 +35890,10 @@
   end
   f32.const -inf
   f32.const 3
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36426,9 +35905,10 @@
   end
   f32.const -inf
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36440,9 +35920,10 @@
   end
   f32.const -inf
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36454,9 +35935,10 @@
   end
   f32.const -inf
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36468,9 +35950,10 @@
   end
   f32.const -inf
   f32.const -0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36482,9 +35965,10 @@
   end
   f32.const -inf
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const -0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36496,9 +35980,10 @@
   end
   f32.const -inf
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36510,9 +35995,10 @@
   end
   f32.const nan:0x400000
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36524,9 +36010,10 @@
   end
   f32.const nan:0x400000
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36538,9 +36025,10 @@
   end
   f32.const -2
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const -2
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36552,9 +36040,10 @@
   end
   f32.const -2
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const -0.5
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36566,9 +36055,10 @@
   end
   f32.const 0
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36580,9 +36070,10 @@
   end
   f32.const -0
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const -0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36594,9 +36085,10 @@
   end
   f32.const 1.1754943508222875e-38
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const 1.1754943508222875e-38
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36608,9 +36100,10 @@
   end
   f32.const -1.1754943508222875e-38
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const -1.1754943508222875e-38
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36622,9 +36115,10 @@
   end
   f32.const 3402823466385288598117041e14
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const 3402823466385288598117041e14
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36636,9 +36130,10 @@
   end
   f32.const -3402823466385288598117041e14
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const -3402823466385288598117041e14
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36650,9 +36145,10 @@
   end
   f32.const 0
   f32.const 3402823466385288598117041e14
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36664,9 +36160,10 @@
   end
   f32.const 0
   f32.const 1.1754943508222875e-38
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36678,9 +36175,10 @@
   end
   f32.const -0
   f32.const 3402823466385288598117041e14
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36692,9 +36190,10 @@
   end
   f32.const -0
   f32.const 17
+  call $~lib/math/NativeMathf.pow
   f32.const -0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36706,9 +36205,10 @@
   end
   f32.const -0
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36720,9 +36220,10 @@
   end
   f32.const -0
   f32.const 1.1754943508222875e-38
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36734,9 +36235,10 @@
   end
   f32.const -1.100000023841858
   f32.const 101
+  call $~lib/math/NativeMathf.pow
   f32.const -15158.70703125
   f32.const -0.2798735499382019
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36748,9 +36250,10 @@
   end
   f32.const 19
   f32.const 5
+  call $~lib/math/NativeMathf.pow
   f32.const 2476099
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36762,9 +36265,10 @@
   end
   f32.const -19
   f32.const 5
+  call $~lib/math/NativeMathf.pow
   f32.const -2476099
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36776,9 +36280,10 @@
   end
   f32.const -193
   f32.const 3
+  call $~lib/math/NativeMathf.pow
   f32.const -7189057
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36790,9 +36295,10 @@
   end
   f32.const -1201
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 1442401
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36804,9 +36310,10 @@
   end
   f32.const 7.312918663024902
   f32.const 17.122268676757812
+  call $~lib/math/NativeMathf.pow
   f32.const 624013315407872
   f32.const -0.14995409548282623
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36818,9 +36325,10 @@
   end
   f32.const 18.804489135742188
   f32.const 3.3214492797851562
+  call $~lib/math/NativeMathf.pow
   f32.const 17076.3515625
   f32.const 0.3042995035648346
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36832,9 +36340,10 @@
   end
   f32.const 7.290969371795654
   f32.const 9.60707950592041
+  call $~lib/math/NativeMathf.pow
   f32.const 194467360
   f32.const -0.10728006064891815
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36846,9 +36355,10 @@
   end
   f32.const 15.783316612243652
   f32.const 18.55087661743164
+  call $~lib/math/NativeMathf.pow
   f32.const 16889945384019652771840
   f32.const 0.09180249273777008
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36860,9 +36370,10 @@
   end
   f32.const 8.319306373596191
   f32.const 0.4197559952735901
+  call $~lib/math/NativeMathf.pow
   f32.const 2.43339204788208
   f32.const 0.009661106392741203
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36874,9 +36385,10 @@
   end
   f32.const 5.831245422363281
   f32.const 10.462174415588379
+  call $~lib/math/NativeMathf.pow
   f32.const 102690080
   f32.const -1.4237762661650777e-03
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36888,9 +36400,10 @@
   end
   f32.const 2.415773391723633
   f32.const 17.12181282043457
+  call $~lib/math/NativeMathf.pow
   f32.const 3619232.25
   f32.const 0.2961936891078949
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36902,9 +36415,10 @@
   end
   f32.const 0.03832307085394859
   f32.const 0.011254354380071163
+  call $~lib/math/NativeMathf.pow
   f32.const 0.9639571905136108
   f32.const -0.4840981066226959
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36916,9 +36430,10 @@
   end
   f32.const 5.4462971687316895
   f32.const 15.814705848693848
+  call $~lib/math/NativeMathf.pow
   f32.const 437749907456
   f32.const -0.40305933356285095
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36930,9 +36445,10 @@
   end
   f32.const 12.87027645111084
   f32.const 14.93734359741211
+  call $~lib/math/NativeMathf.pow
   f32.const 37522809982812160
   f32.const 0.10445278882980347
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36944,9 +36460,10 @@
   end
   f32.const nan:0x400000
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36958,9 +36475,10 @@
   end
   f32.const nan:0x400000
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36972,9 +36490,10 @@
   end
   f32.const inf
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -36986,9 +36505,10 @@
   end
   f32.const -inf
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37000,9 +36520,10 @@
   end
   f32.const 1.401298464324817e-45
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37014,9 +36535,10 @@
   end
   f32.const -1.401298464324817e-45
   f32.const 0
+  call $~lib/math/NativeMathf.pow
   f32.const 1
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37028,9 +36550,10 @@
   end
   f32.const nan:0x400000
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37042,9 +36565,10 @@
   end
   f32.const nan:0x400000
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37056,9 +36580,10 @@
   end
   f32.const inf
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37070,9 +36595,10 @@
   end
   f32.const -inf
   f32.const 1
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37084,9 +36610,10 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37098,9 +36625,10 @@
   end
   f32.const inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37112,9 +36640,10 @@
   end
   f32.const -inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37126,9 +36655,10 @@
   end
   f32.const 1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37140,9 +36670,10 @@
   end
   f32.const -1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37154,9 +36685,10 @@
   end
   f32.const -0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37168,9 +36700,10 @@
   end
   f32.const 0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37182,9 +36715,10 @@
   end
   f32.const 1.0000001192092896
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37196,9 +36730,10 @@
   end
   f32.const inf
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37210,9 +36745,10 @@
   end
   f32.const -1.0000001192092896
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37224,9 +36760,10 @@
   end
   f32.const -inf
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37238,9 +36775,10 @@
   end
   f32.const 1.0000001192092896
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37252,9 +36790,10 @@
   end
   f32.const inf
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37266,9 +36805,10 @@
   end
   f32.const -1.0000001192092896
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37280,9 +36820,10 @@
   end
   f32.const -inf
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37294,9 +36835,10 @@
   end
   f32.const 0.9999999403953552
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37308,9 +36850,10 @@
   end
   f32.const 1.401298464324817e-45
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37322,9 +36865,10 @@
   end
   f32.const 0
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37336,9 +36880,10 @@
   end
   f32.const -0.9999999403953552
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37350,9 +36895,10 @@
   end
   f32.const -1.401298464324817e-45
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37364,9 +36910,10 @@
   end
   f32.const -0
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37378,9 +36925,10 @@
   end
   f32.const 0
   f32.const 1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37392,9 +36940,10 @@
   end
   f32.const -0
   f32.const 1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37406,9 +36955,10 @@
   end
   f32.const 0
   f32.const -3402823466385288598117041e14
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37420,9 +36970,10 @@
   end
   f32.const 0
   f32.const -1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37434,9 +36985,10 @@
   end
   f32.const -0
   f32.const -3402823466385288598117041e14
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37448,9 +37000,10 @@
   end
   f32.const -0
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37462,9 +37015,10 @@
   end
   f32.const -0
   f32.const -1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37476,9 +37030,10 @@
   end
   f32.const -0
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37490,9 +37045,10 @@
   end
   f32.const -0
   f32.const -17
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37504,9 +37060,10 @@
   end
   f32.const inf
   f32.const 1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37518,9 +37075,10 @@
   end
   f32.const inf
   f32.const -1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37532,9 +37090,10 @@
   end
   f32.const -inf
   f32.const 3402823466385288598117041e14
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37546,9 +37105,10 @@
   end
   f32.const -inf
   f32.const 1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37560,9 +37120,10 @@
   end
   f32.const -inf
   f32.const -3402823466385288598117041e14
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37574,9 +37135,10 @@
   end
   f32.const -inf
   f32.const -1.401298464324817e-45
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37588,9 +37150,10 @@
   end
   f32.const -inf
   f32.const 5
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37602,9 +37165,10 @@
   end
   f32.const -inf
   f32.const -5
+  call $~lib/math/NativeMathf.pow
   f32.const -0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37616,9 +37180,10 @@
   end
   f32.const -inf
   f32.const 6
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37630,9 +37195,10 @@
   end
   f32.const -inf
   f32.const -6
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37644,9 +37210,10 @@
   end
   f32.const -inf
   f32.const 2.000000238418579
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37658,9 +37225,10 @@
   end
   f32.const -1
   f32.const 1.0000001192092896
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37672,9 +37240,10 @@
   end
   f32.const -1.401298464324817e-45
   f32.const -1.9999998807907104
+  call $~lib/math/NativeMathf.pow
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37686,9 +37255,10 @@
   end
   f32.const -10
   f32.const 309
+  call $~lib/math/NativeMathf.pow
   f32.const -inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37700,9 +37270,10 @@
   end
   f32.const -inf
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37714,9 +37285,10 @@
   end
   f32.const 2.802596928649634e-45
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 5.293955920339377e-23
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37728,9 +37300,10 @@
   end
   f32.const 1.1210387714598537e-44
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 1.0587911840678754e-22
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37742,9 +37315,10 @@
   end
   f32.const 2.938735877055719e-39
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 5.421010862427522e-20
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37756,9 +37330,10 @@
   end
   f32.const 5.877471754111438e-39
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 1701411834604692317316873e14
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37770,9 +37345,10 @@
   end
   f32.const 1.1754943508222875e-38
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 1.0842021724855044e-19
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37784,9 +37360,10 @@
   end
   f32.const 1.1754943508222875e-38
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 8507059173023461586584365e13
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37798,9 +37375,10 @@
   end
   f32.const 2.350988701644575e-38
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 4253529586511730793292182e13
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37812,9 +37390,10 @@
   end
   f32.const 4.70197740328915e-38
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 2.168404344971009e-19
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37826,9 +37405,10 @@
   end
   f32.const 4.70197740328915e-38
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 2126764793255865396646091e13
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37840,9 +37420,10 @@
   end
   f32.const 5.293955920339377e-23
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 2.802596928649634e-45
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37854,9 +37435,10 @@
   end
   f32.const 2.168404344971009e-19
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 4.656612873077393e-10
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37868,9 +37450,10 @@
   end
   f32.const 2.3283064365386963e-10
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 5.421010862427522e-20
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37882,9 +37465,10 @@
   end
   f32.const 4.656612873077393e-10
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 2.168404344971009e-19
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37896,9 +37480,10 @@
   end
   f32.const 1.1920928955078125e-07
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 8388608
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37910,9 +37495,10 @@
   end
   f32.const 0.000034332275390625
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0.005859375
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37924,9 +37510,10 @@
   end
   f32.const 0.00006103515625
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0.0078125
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37938,9 +37525,10 @@
   end
   f32.const 0.00390625
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0.0625
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37952,9 +37540,10 @@
   end
   f32.const 0.03515625
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0.1875
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37966,9 +37555,10 @@
   end
   f32.const 0.0625
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 0.25
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37980,9 +37570,10 @@
   end
   f32.const 0.25
   f32.const 2
+  call $~lib/math/NativeMathf.pow
   f32.const 0.0625
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -37994,9 +37585,10 @@
   end
   f32.const 2126764793255865396646091e13
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 4611686018427387904
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38008,9 +37600,10 @@
   end
   f32.const 2126764793255865396646091e13
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 4.70197740328915e-38
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38022,9 +37615,10 @@
   end
   f32.const 4253529586511730793292182e13
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38036,9 +37630,10 @@
   end
   f32.const 4253529586511730793292182e13
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 2.350988701644575e-38
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38050,9 +37645,10 @@
   end
   f32.const 4253529586511730793292182e13
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38064,9 +37660,10 @@
   end
   f32.const 8507059173023461586584365e13
   f32.const 0.5
+  call $~lib/math/NativeMathf.pow
   f32.const 9223372036854775808
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38078,9 +37675,10 @@
   end
   f32.const 8507059173023461586584365e13
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 1.1754943508222875e-38
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38092,9 +37690,10 @@
   end
   f32.const 3402823466385288598117041e14
   f32.const inf
+  call $~lib/math/NativeMathf.pow
   f32.const inf
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38106,9 +37705,10 @@
   end
   f32.const 3402823466385288598117041e14
   f32.const -inf
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38120,9 +37720,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -2.465190328815662e-32
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38134,9 +37735,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -3
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38148,9 +37750,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -255
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38162,9 +37765,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -256
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38176,9 +37780,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -257
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38190,9 +37795,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -260
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38204,9 +37810,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -261
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38218,9 +37825,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -32767
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38232,9 +37840,10 @@
   end
   f32.const 1701411834604692317316873e14
   f32.const -32768
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38246,9 +37855,10 @@
   end
   f32.const 3402822046616616342500112e14
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const 2.938737278354183e-39
   f32.const -4.768373855768004e-07
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38260,9 +37870,10 @@
   end
   f32.const 3402822046616616342500112e14
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -6.162981699510909e-33
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38274,9 +37885,10 @@
   end
   f32.const -1701411834604692317316873e14
   f32.const -32767
+  call $~lib/math/NativeMathf.pow
   f32.const -0
   f32.const 0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38288,9 +37900,10 @@
   end
   f32.const -1701411834604692317316873e14
   f32.const -32768
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -0
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38302,9 +37915,10 @@
   end
   f32.const -3402822046616616342500112e14
   f32.const -1
+  call $~lib/math/NativeMathf.pow
   f32.const -2.938737278354183e-39
   f32.const 4.768373855768004e-07
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38316,9 +37930,10 @@
   end
   f32.const -3402822046616616342500112e14
   f32.const -2
+  call $~lib/math/NativeMathf.pow
   f32.const 0
   f32.const -6.162981699510909e-33
-  call $std/math/test_powf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38472,9 +38087,10 @@
     br $for-loop|1
    end
   end
-  f64.const -8.06684839057968
   f64.const -8
-  call $std/math/test_round
+  f64.const -8
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38484,9 +38100,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 4.345239849338305
   f64.const 4
-  call $std/math/test_round
+  f64.const 4
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38496,9 +38113,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -8.38143342755525
   f64.const -8
-  call $std/math/test_round
+  f64.const -8
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38508,9 +38126,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -6.531673581913484
   f64.const -7
-  call $std/math/test_round
+  f64.const -7
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38520,9 +38139,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 9.267056966972586
   f64.const 9
-  call $std/math/test_round
+  f64.const 9
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38532,9 +38152,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 0.6619858980995045
   f64.const 1
-  call $std/math/test_round
+  f64.const 1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38544,9 +38165,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -0.4066039223853553
   f64.const -0
-  call $std/math/test_round
+  f64.const -0
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38556,9 +38178,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 0.5617597462207241
   f64.const 1
-  call $std/math/test_round
+  f64.const 1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38568,9 +38191,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 0.7741522965913037
   f64.const 1
-  call $std/math/test_round
+  f64.const 1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38580,9 +38204,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -0.6787637026394024
   f64.const -1
-  call $std/math/test_round
+  f64.const -1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38594,7 +38219,8 @@
   end
   f64.const nan:0x8000000000000
   f64.const nan:0x8000000000000
-  call $std/math/test_round
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38606,7 +38232,8 @@
   end
   f64.const inf
   f64.const inf
-  call $std/math/test_round
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38618,7 +38245,8 @@
   end
   f64.const -inf
   f64.const -inf
-  call $std/math/test_round
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38630,7 +38258,8 @@
   end
   f64.const 0
   f64.const 0
-  call $std/math/test_round
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38642,7 +38271,8 @@
   end
   f64.const -0
   f64.const -0
-  call $std/math/test_round
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38654,7 +38284,8 @@
   end
   f64.const 1
   f64.const 1
-  call $std/math/test_round
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38666,7 +38297,8 @@
   end
   f64.const -1
   f64.const -1
-  call $std/math/test_round
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38676,9 +38308,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 0.5
   f64.const 1
-  call $std/math/test_round
+  f64.const 1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38688,9 +38321,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -0.5
   f64.const -0
-  call $std/math/test_round
+  f64.const -0
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38700,9 +38334,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 1.5
   f64.const 2
-  call $std/math/test_round
+  f64.const 2
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38712,9 +38347,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -1.5
   f64.const -1
-  call $std/math/test_round
+  f64.const -1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38724,9 +38360,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 1.0000152587890625
   f64.const 1
-  call $std/math/test_round
+  f64.const 1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38736,9 +38373,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -1.0000152587890625
   f64.const -1
-  call $std/math/test_round
+  f64.const -1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38748,9 +38386,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 0.9999923706054688
   f64.const 1
-  call $std/math/test_round
+  f64.const 1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38760,9 +38399,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -0.9999923706054688
   f64.const -1
-  call $std/math/test_round
+  f64.const -1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38772,9 +38412,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 7.888609052210118e-31
   f64.const 0
-  call $std/math/test_round
+  f64.const 0
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38784,9 +38425,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -7.888609052210118e-31
   f64.const -0
-  call $std/math/test_round
+  f64.const -0
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -38796,9 +38438,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.066848754882812
   f32.const -8
-  call $std/math/test_roundf
+  f32.const -8
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38808,9 +38451,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4.345239639282227
   f32.const 4
-  call $std/math/test_roundf
+  f32.const 4
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38820,9 +38464,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.381433486938477
   f32.const -8
-  call $std/math/test_roundf
+  f32.const -8
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38832,9 +38477,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.531673431396484
   f32.const -7
-  call $std/math/test_roundf
+  f32.const -7
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38844,9 +38490,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 9.267057418823242
   f32.const 9
-  call $std/math/test_roundf
+  f32.const 9
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38856,9 +38503,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.6619858741760254
   f32.const 1
-  call $std/math/test_roundf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38868,9 +38516,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.40660393238067627
   f32.const -0
-  call $std/math/test_roundf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38880,9 +38529,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5617597699165344
   f32.const 1
-  call $std/math/test_roundf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38892,9 +38542,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.7741522789001465
   f32.const 1
-  call $std/math/test_roundf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38904,9 +38555,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.6787636876106262
   f32.const -1
-  call $std/math/test_roundf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38918,7 +38570,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_roundf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38930,7 +38583,8 @@
   end
   f32.const inf
   f32.const inf
-  call $std/math/test_roundf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38942,7 +38596,8 @@
   end
   f32.const -inf
   f32.const -inf
-  call $std/math/test_roundf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38954,7 +38609,8 @@
   end
   f32.const 0
   f32.const 0
-  call $std/math/test_roundf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38966,7 +38622,8 @@
   end
   f32.const -0
   f32.const -0
-  call $std/math/test_roundf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38978,7 +38635,8 @@
   end
   f32.const 1
   f32.const 1
-  call $std/math/test_roundf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -38990,7 +38648,8 @@
   end
   f32.const -1
   f32.const -1
-  call $std/math/test_roundf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39000,9 +38659,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const 1
-  call $std/math/test_roundf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39012,9 +38672,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const -0
-  call $std/math/test_roundf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39024,9 +38685,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const 1.5
   f64.const 2
-  call $std/math/test_round
+  f64.const 2
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39036,9 +38698,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f64.const -1.5
   f64.const -1
-  call $std/math/test_round
+  f64.const -1
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39048,9 +38711,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.0000152587890625
   f32.const 1
-  call $std/math/test_roundf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39060,9 +38724,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.0000152587890625
   f32.const -1
-  call $std/math/test_roundf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39072,9 +38737,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.9999923706054688
   f32.const 1
-  call $std/math/test_roundf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39084,9 +38750,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.9999923706054688
   f32.const -1
-  call $std/math/test_roundf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39096,9 +38763,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 7.888609052210118e-31
   f32.const 0
-  call $std/math/test_roundf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39108,9 +38776,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -7.888609052210118e-31
   f32.const -0
-  call $std/math/test_roundf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -39338,8 +39007,10 @@
   end
   f64.const -8.06684839057968
   f64.const 4.535662560676869
+  call $~lib/math/NativeMath.rem
   f64.const 1.0044767307740567
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39351,8 +39022,10 @@
   end
   f64.const 4.345239849338305
   f64.const -8.88799136300345
+  call $~lib/math/NativeMath.rem
   f64.const 4.345239849338305
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39364,8 +39037,10 @@
   end
   f64.const -8.38143342755525
   f64.const -2.763607337379588
+  call $~lib/math/NativeMath.rem
   f64.const -0.09061141541648476
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39377,8 +39052,10 @@
   end
   f64.const -6.531673581913484
   f64.const 4.567535276842744
+  call $~lib/math/NativeMath.rem
   f64.const -1.9641383050707404
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39390,8 +39067,10 @@
   end
   f64.const 9.267056966972586
   f64.const 4.811392084359796
+  call $~lib/math/NativeMath.rem
   f64.const -0.35572720174700656
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39403,8 +39082,10 @@
   end
   f64.const -6.450045556060236
   f64.const 0.6620717923376739
+  call $~lib/math/NativeMath.rem
   f64.const 0.17067236731650248
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39416,8 +39097,10 @@
   end
   f64.const 7.858890253041697
   f64.const 0.05215452675006225
+  call $~lib/math/NativeMath.rem
   f64.const -0.016443286217702822
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39429,8 +39112,10 @@
   end
   f64.const -0.792054511984896
   f64.const 7.67640268511754
+  call $~lib/math/NativeMath.rem
   f64.const -0.792054511984896
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39442,8 +39127,10 @@
   end
   f64.const 0.615702673197924
   f64.const 2.0119025790324803
+  call $~lib/math/NativeMath.rem
   f64.const 0.615702673197924
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39455,8 +39142,10 @@
   end
   f64.const -0.5587586823609152
   f64.const 0.03223983060263804
+  call $~lib/math/NativeMath.rem
   f64.const -0.0106815621160685
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39468,8 +39157,10 @@
   end
   f64.const 0
   f64.const 1
+  call $~lib/math/NativeMath.rem
+  f64.const 0
   f64.const 0
-  call $std/math/test_rem
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39481,8 +39172,10 @@
   end
   f64.const -0
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39494,8 +39187,10 @@
   end
   f64.const 0.5
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const 0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39507,8 +39202,10 @@
   end
   f64.const -0.5
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const -0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39520,8 +39217,10 @@
   end
   f64.const 1
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const 0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39533,8 +39232,10 @@
   end
   f64.const -1
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39546,8 +39247,10 @@
   end
   f64.const 1.5
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const -0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39559,8 +39262,10 @@
   end
   f64.const -1.5
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const 0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39572,8 +39277,10 @@
   end
   f64.const 2
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const 0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39585,8 +39292,10 @@
   end
   f64.const -2
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39598,8 +39307,10 @@
   end
   f64.const inf
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39611,8 +39322,10 @@
   end
   f64.const -inf
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39624,8 +39337,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const 1
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39637,8 +39352,10 @@
   end
   f64.const 0
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const 0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39650,8 +39367,10 @@
   end
   f64.const -0
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39663,8 +39382,10 @@
   end
   f64.const 0.5
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const 0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39676,8 +39397,10 @@
   end
   f64.const -0.5
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const -0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39689,8 +39412,10 @@
   end
   f64.const 1
   f64.const -1
+  call $~lib/math/NativeMath.rem
+  f64.const 0
   f64.const 0
-  call $std/math/test_rem
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39702,8 +39427,10 @@
   end
   f64.const -1
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39715,8 +39442,10 @@
   end
   f64.const 1.5
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const -0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39728,8 +39457,10 @@
   end
   f64.const -1.5
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const 0.5
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39741,8 +39472,10 @@
   end
   f64.const 2
   f64.const -1
+  call $~lib/math/NativeMath.rem
+  f64.const 0
   f64.const 0
-  call $std/math/test_rem
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39754,8 +39487,10 @@
   end
   f64.const -2
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39767,8 +39502,10 @@
   end
   f64.const inf
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39780,8 +39517,10 @@
   end
   f64.const -inf
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39793,8 +39532,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const -1
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39806,8 +39547,10 @@
   end
   f64.const 0
   f64.const 0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39819,8 +39562,10 @@
   end
   f64.const 0
   f64.const -0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39832,8 +39577,10 @@
   end
   f64.const 0
   f64.const inf
+  call $~lib/math/NativeMath.rem
   f64.const 0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39845,8 +39592,10 @@
   end
   f64.const 0
   f64.const -inf
+  call $~lib/math/NativeMath.rem
   f64.const 0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39858,8 +39607,10 @@
   end
   f64.const 0
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39871,8 +39622,10 @@
   end
   f64.const -0
   f64.const 0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39884,8 +39637,10 @@
   end
   f64.const -0
   f64.const -0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39897,8 +39652,10 @@
   end
   f64.const -0
   f64.const inf
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39910,8 +39667,10 @@
   end
   f64.const -0
   f64.const -inf
+  call $~lib/math/NativeMath.rem
   f64.const -0
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39923,8 +39682,10 @@
   end
   f64.const -0
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39936,8 +39697,10 @@
   end
   f64.const 1
   f64.const 0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39949,8 +39712,10 @@
   end
   f64.const -1
   f64.const 0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39962,8 +39727,10 @@
   end
   f64.const inf
   f64.const 0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39975,8 +39742,10 @@
   end
   f64.const -inf
   f64.const 0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -39988,8 +39757,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const 0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40001,8 +39772,10 @@
   end
   f64.const -1
   f64.const -0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40014,8 +39787,10 @@
   end
   f64.const inf
   f64.const -0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40027,8 +39802,10 @@
   end
   f64.const -inf
   f64.const -0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40040,8 +39817,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const -0
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40053,8 +39832,10 @@
   end
   f64.const inf
   f64.const 2
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40066,8 +39847,10 @@
   end
   f64.const inf
   f64.const -0.5
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40079,8 +39862,10 @@
   end
   f64.const inf
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40092,8 +39877,10 @@
   end
   f64.const -inf
   f64.const 2
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40105,8 +39892,10 @@
   end
   f64.const -inf
   f64.const -0.5
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40118,8 +39907,10 @@
   end
   f64.const -inf
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40131,8 +39922,10 @@
   end
   f64.const nan:0x8000000000000
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40144,8 +39937,10 @@
   end
   f64.const 1
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40157,8 +39952,10 @@
   end
   f64.const -1
   f64.const nan:0x8000000000000
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40170,8 +39967,10 @@
   end
   f64.const 1
   f64.const inf
+  call $~lib/math/NativeMath.rem
   f64.const 1
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40183,8 +39982,10 @@
   end
   f64.const -1
   f64.const inf
+  call $~lib/math/NativeMath.rem
   f64.const -1
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40196,8 +39997,10 @@
   end
   f64.const inf
   f64.const inf
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40209,8 +40012,10 @@
   end
   f64.const -inf
   f64.const inf
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40222,8 +40027,10 @@
   end
   f64.const 1
   f64.const -inf
+  call $~lib/math/NativeMath.rem
   f64.const 1
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40235,8 +40042,10 @@
   end
   f64.const -1
   f64.const -inf
+  call $~lib/math/NativeMath.rem
   f64.const -1
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40248,8 +40057,10 @@
   end
   f64.const inf
   f64.const -inf
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40261,8 +40072,10 @@
   end
   f64.const -inf
   f64.const -inf
+  call $~lib/math/NativeMath.rem
   f64.const nan:0x8000000000000
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40274,8 +40087,10 @@
   end
   f64.const 1.75
   f64.const 0.5
+  call $~lib/math/NativeMath.rem
   f64.const -0.25
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40287,8 +40102,10 @@
   end
   f64.const -1.75
   f64.const 0.5
+  call $~lib/math/NativeMath.rem
   f64.const 0.25
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40300,8 +40117,10 @@
   end
   f64.const 1.75
   f64.const -0.5
+  call $~lib/math/NativeMath.rem
   f64.const -0.25
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40313,8 +40132,10 @@
   end
   f64.const -1.75
   f64.const -0.5
+  call $~lib/math/NativeMath.rem
   f64.const 0.25
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40326,8 +40147,10 @@
   end
   f64.const 8e-323
   f64.const inf
+  call $~lib/math/NativeMath.rem
   f64.const 8e-323
-  call $std/math/test_rem
+  f64.const 0
+  call $std/math/check<f64>
   i32.eqz
   if
    i32.const 0
@@ -40339,8 +40162,10 @@
   end
   f32.const -8.066848754882812
   f32.const 4.535662651062012
+  call $~lib/math/NativeMathf.rem
   f32.const 1.004476547241211
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40352,8 +40177,10 @@
   end
   f32.const 4.345239639282227
   f32.const -8.887990951538086
+  call $~lib/math/NativeMathf.rem
   f32.const 4.345239639282227
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40365,8 +40192,10 @@
   end
   f32.const -8.381433486938477
   f32.const -2.7636072635650635
+  call $~lib/math/NativeMathf.rem
   f32.const -0.09061169624328613
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40378,8 +40207,10 @@
   end
   f32.const -6.531673431396484
   f32.const 4.567535400390625
+  call $~lib/math/NativeMathf.rem
   f32.const -1.9641380310058594
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40391,8 +40222,10 @@
   end
   f32.const 9.267057418823242
   f32.const 4.811392307281494
+  call $~lib/math/NativeMathf.rem
   f32.const -0.3557271957397461
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40404,8 +40237,10 @@
   end
   f32.const -6.450045585632324
   f32.const 0.6620717644691467
+  call $~lib/math/NativeMathf.rem
   f32.const 0.17067205905914307
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40417,8 +40252,10 @@
   end
   f32.const 7.858890056610107
   f32.const 0.052154526114463806
+  call $~lib/math/NativeMathf.rem
   f32.const -0.016443386673927307
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40430,8 +40267,10 @@
   end
   f32.const -0.7920545339584351
   f32.const 7.676402568817139
+  call $~lib/math/NativeMathf.rem
   f32.const -0.7920545339584351
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40443,8 +40282,10 @@
   end
   f32.const 0.6157026886940002
   f32.const 2.0119025707244873
+  call $~lib/math/NativeMathf.rem
   f32.const 0.6157026886940002
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40456,8 +40297,10 @@
   end
   f32.const -0.5587586760520935
   f32.const 0.03223983198404312
+  call $~lib/math/NativeMathf.rem
   f32.const -0.010681532323360443
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40469,8 +40312,10 @@
   end
   f32.const 0
   f32.const 1
+  call $~lib/math/NativeMathf.rem
+  f32.const 0
   f32.const 0
-  call $std/math/test_remf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40482,8 +40327,10 @@
   end
   f32.const -0
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40495,8 +40342,10 @@
   end
   f32.const 0.5
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const 0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40508,8 +40357,10 @@
   end
   f32.const -0.5
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const -0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40521,8 +40372,10 @@
   end
   f32.const 1
   f32.const 1
+  call $~lib/math/NativeMathf.rem
+  f32.const 0
   f32.const 0
-  call $std/math/test_remf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40534,8 +40387,10 @@
   end
   f32.const -1
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40547,8 +40402,10 @@
   end
   f32.const 1.5
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const -0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40560,8 +40417,10 @@
   end
   f32.const -1.5
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const 0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40573,8 +40432,10 @@
   end
   f32.const 2
   f32.const 1
+  call $~lib/math/NativeMathf.rem
+  f32.const 0
   f32.const 0
-  call $std/math/test_remf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40586,8 +40447,10 @@
   end
   f32.const -2
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40599,8 +40462,10 @@
   end
   f32.const inf
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40612,8 +40477,10 @@
   end
   f32.const -inf
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40625,8 +40492,10 @@
   end
   f32.const nan:0x400000
   f32.const 1
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40638,8 +40507,10 @@
   end
   f32.const 0
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const 0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40651,8 +40522,10 @@
   end
   f32.const -0
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40664,8 +40537,10 @@
   end
   f32.const 0.5
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const 0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40677,8 +40552,10 @@
   end
   f32.const -0.5
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const -0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40690,8 +40567,10 @@
   end
   f32.const 1
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const 0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40703,8 +40582,10 @@
   end
   f32.const -1
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40716,8 +40597,10 @@
   end
   f32.const 1.5
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const -0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40729,8 +40612,10 @@
   end
   f32.const -1.5
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const 0.5
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40742,8 +40627,10 @@
   end
   f32.const 2
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const 0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40755,8 +40642,10 @@
   end
   f32.const -2
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40768,8 +40657,10 @@
   end
   f32.const inf
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40781,8 +40672,10 @@
   end
   f32.const -inf
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40794,8 +40687,10 @@
   end
   f32.const nan:0x400000
   f32.const -1
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40807,8 +40702,10 @@
   end
   f32.const 0
   f32.const 0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40820,8 +40717,10 @@
   end
   f32.const 0
   f32.const -0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40833,8 +40732,10 @@
   end
   f32.const 0
   f32.const inf
+  call $~lib/math/NativeMathf.rem
+  f32.const 0
   f32.const 0
-  call $std/math/test_remf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40846,8 +40747,10 @@
   end
   f32.const 0
   f32.const -inf
+  call $~lib/math/NativeMathf.rem
   f32.const 0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40859,8 +40762,10 @@
   end
   f32.const 0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40872,8 +40777,10 @@
   end
   f32.const -0
   f32.const 0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40885,8 +40792,10 @@
   end
   f32.const -0
   f32.const -0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40898,8 +40807,10 @@
   end
   f32.const -0
   f32.const inf
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40911,8 +40822,10 @@
   end
   f32.const -0
   f32.const -inf
+  call $~lib/math/NativeMathf.rem
   f32.const -0
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40924,8 +40837,10 @@
   end
   f32.const -0
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40937,8 +40852,10 @@
   end
   f32.const 1
   f32.const 0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40950,8 +40867,10 @@
   end
   f32.const -1
   f32.const 0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40963,8 +40882,10 @@
   end
   f32.const inf
   f32.const 0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40976,8 +40897,10 @@
   end
   f32.const -inf
   f32.const 0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -40989,8 +40912,10 @@
   end
   f32.const nan:0x400000
   f32.const 0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41002,8 +40927,10 @@
   end
   f32.const -1
   f32.const -0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41015,8 +40942,10 @@
   end
   f32.const inf
   f32.const -0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41028,8 +40957,10 @@
   end
   f32.const -inf
   f32.const -0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41041,8 +40972,10 @@
   end
   f32.const nan:0x400000
   f32.const -0
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41054,8 +40987,10 @@
   end
   f32.const inf
   f32.const 2
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41067,8 +41002,10 @@
   end
   f32.const inf
   f32.const -0.5
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41080,8 +41017,10 @@
   end
   f32.const inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41093,8 +41032,10 @@
   end
   f32.const -inf
   f32.const 2
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41106,8 +41047,10 @@
   end
   f32.const -inf
   f32.const -0.5
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41119,8 +41062,10 @@
   end
   f32.const -inf
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41132,8 +41077,10 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41145,8 +41092,10 @@
   end
   f32.const 1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41158,8 +41107,10 @@
   end
   f32.const -1
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41171,8 +41122,10 @@
   end
   f32.const 1
   f32.const inf
+  call $~lib/math/NativeMathf.rem
   f32.const 1
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41184,8 +41137,10 @@
   end
   f32.const -1
   f32.const inf
+  call $~lib/math/NativeMathf.rem
   f32.const -1
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41197,8 +41152,10 @@
   end
   f32.const inf
   f32.const inf
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41210,8 +41167,10 @@
   end
   f32.const -inf
   f32.const inf
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41223,8 +41182,10 @@
   end
   f32.const 1
   f32.const -inf
+  call $~lib/math/NativeMathf.rem
   f32.const 1
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41236,8 +41197,10 @@
   end
   f32.const -1
   f32.const -inf
+  call $~lib/math/NativeMathf.rem
   f32.const -1
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41249,8 +41212,10 @@
   end
   f32.const inf
   f32.const -inf
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41262,8 +41227,10 @@
   end
   f32.const -inf
   f32.const -inf
+  call $~lib/math/NativeMathf.rem
   f32.const nan:0x400000
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41275,8 +41242,10 @@
   end
   f32.const 1.75
   f32.const 0.5
+  call $~lib/math/NativeMathf.rem
   f32.const -0.25
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41288,8 +41257,10 @@
   end
   f32.const -1.75
   f32.const 0.5
+  call $~lib/math/NativeMathf.rem
   f32.const 0.25
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41301,8 +41272,10 @@
   end
   f32.const 1.75
   f32.const -0.5
+  call $~lib/math/NativeMathf.rem
   f32.const -0.25
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41314,8 +41287,10 @@
   end
   f32.const -1.75
   f32.const -0.5
+  call $~lib/math/NativeMathf.rem
   f32.const 0.25
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -41327,8 +41302,10 @@
   end
   f32.const 5.877471754111438e-39
   f32.const inf
+  call $~lib/math/NativeMathf.rem
   f32.const 5.877471754111438e-39
-  call $std/math/test_remf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43311,9 +43288,10 @@
    unreachable
   end
   f32.const -8.066848754882812
+  call $~lib/math/NativeMathf.sinh
   f32.const -1593.521240234375
   f32.const 0.1671663224697113
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43324,9 +43302,10 @@
    unreachable
   end
   f32.const 4.345239639282227
+  call $~lib/math/NativeMathf.sinh
   f32.const 38.548770904541016
   f32.const -0.49340328574180603
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43337,9 +43316,10 @@
    unreachable
   end
   f32.const -8.381433486938477
+  call $~lib/math/NativeMathf.sinh
   f32.const -2182.630859375
   f32.const 0.0849970355629921
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43350,9 +43330,10 @@
    unreachable
   end
   f32.const -6.531673431396484
+  call $~lib/math/NativeMathf.sinh
   f32.const -343.2723388671875
   f32.const 0.0704190656542778
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43363,9 +43344,10 @@
    unreachable
   end
   f32.const 9.267057418823242
+  call $~lib/math/NativeMathf.sinh
   f32.const 5291.78125
   f32.const -0.44362515211105347
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43376,9 +43358,10 @@
    unreachable
   end
   f32.const 0.6619858741760254
+  call $~lib/math/NativeMathf.sinh
   f32.const 0.7114062309265137
   f32.const 0.058103885501623154
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43389,9 +43372,10 @@
    unreachable
   end
   f32.const -0.40660393238067627
+  call $~lib/math/NativeMathf.sinh
   f32.const -0.4179006516933441
   f32.const 0.39349499344825745
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43402,9 +43386,10 @@
    unreachable
   end
   f32.const 0.5617597699165344
+  call $~lib/math/NativeMathf.sinh
   f32.const 0.5917755961418152
   f32.const -0.4183797240257263
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43415,9 +43400,10 @@
    unreachable
   end
   f32.const 0.7741522789001465
+  call $~lib/math/NativeMathf.sinh
   f32.const 0.8538292050361633
   f32.const 0.45992106199264526
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43428,9 +43414,10 @@
    unreachable
   end
   f32.const -0.6787636876106262
+  call $~lib/math/NativeMathf.sinh
   f32.const -0.7320976257324219
   f32.const -0.48159059882164
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43441,9 +43428,10 @@
    unreachable
   end
   f32.const 0
+  call $~lib/math/NativeMathf.sinh
   f32.const 0
   f32.const 0
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43454,9 +43442,10 @@
    unreachable
   end
   f32.const -0
+  call $~lib/math/NativeMathf.sinh
   f32.const -0
   f32.const 0
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43467,9 +43456,10 @@
    unreachable
   end
   f32.const inf
+  call $~lib/math/NativeMathf.sinh
   f32.const inf
   f32.const 0
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43480,9 +43470,10 @@
    unreachable
   end
   f32.const -inf
+  call $~lib/math/NativeMathf.sinh
   f32.const -inf
   f32.const 0
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -43493,9 +43484,10 @@
    unreachable
   end
   f32.const nan:0x400000
+  call $~lib/math/NativeMathf.sinh
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sinhf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44597,10 +44589,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.066848754882812
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44610,10 +44602,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4.345239639282227
+  f32.const 2.084523916244507
   f32.const 2.084523916244507
   f32.const 0.3200402557849884
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44623,10 +44615,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.381433486938477
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44636,10 +44628,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.531673431396484
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44649,10 +44641,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 9.267057418823242
+  f32.const 3.0441842079162598
   f32.const 3.0441842079162598
   f32.const 0.05022354796528816
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44662,10 +44654,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.6619858741760254
+  f32.const 0.813625156879425
   f32.const 0.813625156879425
   f32.const 0.2240506112575531
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44675,10 +44667,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.40660393238067627
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44688,10 +44680,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5617597699165344
+  f32.const 0.7495063543319702
   f32.const 0.7495063543319702
   f32.const 0.05895441770553589
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44701,10 +44693,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.7741522789001465
+  f32.const 0.879859209060669
   f32.const 0.879859209060669
   f32.const -0.4874873757362366
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44714,10 +44706,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.6787636876106262
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44730,7 +44722,7 @@
   f32.const nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44743,7 +44735,7 @@
   f32.const inf
   f32.const inf
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44753,10 +44745,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -inf
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44769,7 +44761,7 @@
   f32.const 0
   f32.const 0
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44782,7 +44774,7 @@
   f32.const -0
   f32.const -0
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44795,7 +44787,7 @@
   f32.const 1
   f32.const 1
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44805,10 +44797,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44818,10 +44810,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4
+  f32.const 2
   f32.const 2
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44831,10 +44823,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 2.802596928649634e-45
+  f32.const 5.293955920339377e-23
   f32.const 5.293955920339377e-23
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44844,10 +44836,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4.203895392974451e-45
+  f32.const 6.483745598763743e-23
   f32.const 6.483745598763743e-23
   f32.const 0.37388554215431213
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44857,10 +44849,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.401298464324817e-45
+  f32.const 3.743392066509216e-23
   f32.const 3.743392066509216e-23
   f32.const -0.20303145051002502
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44870,10 +44862,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.401298464324817e-45
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44883,10 +44875,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 3402823466385288598117041e14
+  f32.const 18446742974197923840
   f32.const 18446742974197923840
   f32.const -0.5
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44896,10 +44888,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -3402823466385288598117041e14
+  f32.const -nan:0x400000
   f32.const nan:0x400000
   f32.const 0
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44909,10 +44901,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.9999998807907104
+  f32.const 0.9999999403953552
   f32.const 0.9999999403953552
   f32.const 2.980232594040899e-08
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44925,7 +44917,7 @@
   f32.const 0.9999999403953552
   f32.const 0.9999999403953552
   f32.const -0.5
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44935,10 +44927,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.999999761581421
+  f32.const 1.4142134189605713
   f32.const 1.4142134189605713
   f32.const -0.4959246516227722
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44948,10 +44940,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.9999998807907104
+  f32.const 1.4142135381698608
   f32.const 1.4142135381698608
   f32.const 0.15052194893360138
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44961,10 +44953,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.0000001192092896
+  f32.const 1
   f32.const 1
   f32.const -0.5
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44974,10 +44966,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.000000238418579
+  f32.const 1.0000001192092896
   f32.const 1.0000001192092896
   f32.const 5.960463766996327e-08
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -44987,10 +44979,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 2.000000238418579
+  f32.const 1.4142136573791504
   f32.const 1.4142136573791504
   f32.const 0.08986179530620575
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -45000,10 +44992,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 2.000000476837158
+  f32.const 1.41421377658844
   f32.const 1.41421377658844
   f32.const 0.3827550709247589
-  call $std/math/test_sqrtf
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47263,9 +47255,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.066848754882812
   f32.const -8
-  call $std/math/test_truncf
+  f32.const -8
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47275,9 +47268,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 4.345239639282227
   f32.const 4
-  call $std/math/test_truncf
+  f32.const 4
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47287,9 +47281,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -8.381433486938477
   f32.const -8
-  call $std/math/test_truncf
+  f32.const -8
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47299,9 +47294,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -6.531673431396484
   f32.const -6
-  call $std/math/test_truncf
+  f32.const -6
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47311,9 +47307,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 9.267057418823242
   f32.const 9
-  call $std/math/test_truncf
+  f32.const 9
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47323,9 +47320,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.6619858741760254
   f32.const 0
-  call $std/math/test_truncf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47335,9 +47333,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.40660393238067627
   f32.const -0
-  call $std/math/test_truncf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47347,9 +47346,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5617597699165344
   f32.const 0
-  call $std/math/test_truncf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47359,9 +47359,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.7741522789001465
   f32.const 0
-  call $std/math/test_truncf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47371,9 +47372,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.6787636876106262
   f32.const -0
-  call $std/math/test_truncf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47385,7 +47387,8 @@
   end
   f32.const nan:0x400000
   f32.const nan:0x400000
-  call $std/math/test_truncf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47397,7 +47400,8 @@
   end
   f32.const inf
   f32.const inf
-  call $std/math/test_truncf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47409,7 +47413,8 @@
   end
   f32.const -inf
   f32.const -inf
-  call $std/math/test_truncf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47421,7 +47426,8 @@
   end
   f32.const 0
   f32.const 0
-  call $std/math/test_truncf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47433,7 +47439,8 @@
   end
   f32.const -0
   f32.const -0
-  call $std/math/test_truncf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47445,7 +47452,8 @@
   end
   f32.const 1
   f32.const 1
-  call $std/math/test_truncf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47457,7 +47465,8 @@
   end
   f32.const -1
   f32.const -1
-  call $std/math/test_truncf
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47467,9 +47476,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.5
   f32.const 0
-  call $std/math/test_truncf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47479,9 +47489,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.5
   f32.const -0
-  call $std/math/test_truncf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47491,9 +47502,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 1.0000152587890625
   f32.const 1
-  call $std/math/test_truncf
+  f32.const 1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47503,9 +47515,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -1.0000152587890625
   f32.const -1
-  call $std/math/test_truncf
+  f32.const -1
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47515,9 +47528,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 0.9999923706054688
   f32.const 0
-  call $std/math/test_truncf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47527,9 +47541,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -0.9999923706054688
   f32.const -0
-  call $std/math/test_truncf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47539,9 +47554,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const 7.888609052210118e-31
   f32.const 0
-  call $std/math/test_truncf
+  f32.const 0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
@@ -47551,9 +47567,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  f32.const -7.888609052210118e-31
   f32.const -0
-  call $std/math/test_truncf
+  f32.const -0
+  f32.const 0
+  call $std/math/check<f32>
   i32.eqz
   if
    i32.const 0
diff --git a/tests/compiler/std/math.untouched.wat b/tests/compiler/std/math.untouched.wat
index 7ee6e66b0b..dde1e95c35 100644
--- a/tests/compiler/std/math.untouched.wat
+++ b/tests/compiler/std/math.untouched.wat
@@ -1,31 +1,44 @@
 (module
  (type $f64_=>_f64 (func (param f64) (result f64)))
+ (type $f32_=>_f32 (func (param f32) (result f32)))
  (type $f32_f32_f32_i32_=>_i32 (func (param f32 f32 f32 i32) (result i32)))
  (type $f64_f64_f64_i32_=>_i32 (func (param f64 f64 f64 i32) (result i32)))
- (type $f32_=>_f32 (func (param f32) (result f32)))
  (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
+ (type $f32_f32_=>_f32 (func (param f32 f32) (result f32)))
  (type $f32_f32_f32_f32_i32_=>_i32 (func (param f32 f32 f32 f32 i32) (result i32)))
  (type $f64_f64_f64_f64_i32_=>_i32 (func (param f64 f64 f64 f64 i32) (result i32)))
- (type $f32_f32_=>_f32 (func (param f32 f32) (result f32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $f64_=>_i32 (func (param f64) (result i32)))
  (type $none_=>_f64 (func (result f64)))
+ (type $i32_=>_f64 (func (param i32) (result f64)))
+ (type $f64_f64_i32_=>_f64 (func (param f64 f64 i32) (result f64)))
  (type $none_=>_none (func))
- (type $f64_=>_i32 (func (param f64) (result i32)))
+ (type $i64_=>_none (func (param i64)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $f32_=>_i32 (func (param f32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
+ (type $i32_=>_f32 (func (param i32) (result f32)))
  (type $f32_i32_=>_f32 (func (param f32 i32) (result f32)))
+ (type $f64_=>_f32 (func (param f64) (result f32)))
+ (type $f64_i32_=>_f32 (func (param f64 i32) (result f32)))
  (type $f64_i32_=>_f64 (func (param f64 i32) (result f64)))
+ (type $f64_i64_i64_=>_f64 (func (param f64 i64 i64) (result f64)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i64_=>_none (func (param i64)))
  (type $f64_=>_none (func (param f64)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i64_i64_i64_i64_i64_i32_=>_i32 (func (param i64 i64 i64 i64 i64 i32) (result i32)))
- (type $f32_=>_i32 (func (param f32) (result i32)))
+ (type $f32_i32_=>_i32 (func (param f32 i32) (result i32)))
+ (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32)))
  (type $f32_i32_f32_f32_i32_=>_i32 (func (param f32 i32 f32 f32 i32) (result i32)))
  (type $f64_i32_f64_f64_i32_=>_i32 (func (param f64 i32 f64 f64 i32) (result i32)))
  (type $f64_i64_=>_i32 (func (param f64 i64) (result i32)))
+ (type $f64_i64_i32_=>_i32 (func (param f64 i64 i32) (result i32)))
  (type $i64_=>_i64 (func (param i64) (result i64)))
  (type $i64_i32_=>_i64 (func (param i64 i32) (result i64)))
  (type $none_=>_f32 (func (result f32)))
+ (type $i32_f32_=>_f32 (func (param i32 f32) (result f32)))
  (type $f32_f32_f32_=>_f32 (func (param f32 f32 f32) (result f32)))
- (type $f64_f64_i32_=>_f64 (func (param f64 f64 i32) (result f64)))
+ (type $i32_f64_=>_f64 (func (param i32 f64) (result f64)))
+ (type $i64_=>_f64 (func (param i64) (result f64)))
  (type $f64_f64_f64_=>_f64 (func (param f64 f64 f64) (result f64)))
  (import "Math" "E" (global $~lib/bindings/Math/E f64))
  (import "Math" "LN2" (global $~lib/bindings/Math/LN2 f64))
@@ -125,6 +138,17 @@
  (global $~lib/builtins/f32.MIN_VALUE f32 (f32.const 1.401298464324817e-45))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/math/NativeMath.signbit (param $0 f64) (result i32)
+  local.get $0
+  i64.reinterpret_f64
+  i64.const 63
+  i64.shr_u
+  i32.wrap_i64
+  local.get $0
+  local.get $0
+  f64.eq
+  i32.and
+ )
  (func $std/math/eulp (param $0 f64) (result i32)
   (local $1 i64)
   (local $2 i32)
@@ -244,7 +268,6 @@
   f64.mul
  )
  (func $std/math/ulperr (param $0 f64) (param $1 f64) (param $2 f64) (result f64)
-  (local $3 f64)
   local.get $0
   local.get $0
   f64.ne
@@ -264,31 +287,9 @@
   f64.eq
   if
    local.get $0
-   local.set $3
-   local.get $3
-   i64.reinterpret_f64
-   i64.const 63
-   i64.shr_u
-   i32.wrap_i64
-   local.get $3
-   local.get $3
-   f64.eq
-   i32.and
-   i32.const 0
-   i32.ne
+   call $~lib/math/NativeMath.signbit
    local.get $1
-   local.set $3
-   local.get $3
-   i64.reinterpret_f64
-   i64.const 63
-   i64.shr_u
-   i32.wrap_i64
-   local.get $3
-   local.get $3
-   f64.eq
-   i32.and
-   i32.const 0
-   i32.ne
+   call $~lib/math/NativeMath.signbit
    i32.eq
    if
     local.get $2
@@ -361,6 +362,16 @@
   end
   i32.const 1
  )
+ (func $~lib/math/NativeMathf.signbit (param $0 f32) (result i32)
+  local.get $0
+  i32.reinterpret_f32
+  i32.const 31
+  i32.shr_u
+  local.get $0
+  local.get $0
+  f32.eq
+  i32.and
+ )
  (func $std/math/eulpf (param $0 f32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -478,7 +489,6 @@
   f32.mul
  )
  (func $std/math/ulperrf (param $0 f32) (param $1 f32) (param $2 f32) (result f32)
-  (local $3 f32)
   local.get $0
   local.get $0
   f32.ne
@@ -498,29 +508,9 @@
   f32.eq
   if
    local.get $0
-   local.set $3
-   local.get $3
-   i32.reinterpret_f32
-   i32.const 31
-   i32.shr_u
-   local.get $3
-   local.get $3
-   f32.eq
-   i32.and
-   i32.const 0
-   i32.ne
+   call $~lib/math/NativeMathf.signbit
    local.get $1
-   local.set $3
-   local.get $3
-   i32.reinterpret_f32
-   i32.const 31
-   i32.shr_u
-   local.get $3
-   local.get $3
-   f32.eq
-   i32.and
-   i32.const 0
-   i32.ne
+   call $~lib/math/NativeMathf.signbit
    i32.eq
    if
     local.get $2
@@ -615,12 +605,13 @@
   local.get $4
   call $std/math/check<f32>
  )
- (func $std/math/test_abs (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  (local $4 f64)
+ (func $~lib/math/NativeMath.abs (param $0 f64) (result f64)
   local.get $0
-  local.set $4
-  local.get $4
   f64.abs
+ )
+ (func $std/math/test_abs (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.abs
   local.get $1
   local.get $2
   local.get $3
@@ -642,12 +633,13 @@
    i32.const 0
   end
  )
- (func $std/math/test_absf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
-  (local $4 f32)
+ (func $~lib/math/NativeMathf.abs (param $0 f32) (result f32)
   local.get $0
-  local.set $4
-  local.get $4
   f32.abs
+ )
+ (func $std/math/test_absf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMathf.abs
   local.get $1
   local.get $2
   local.get $3
@@ -1295,9 +1287,9 @@
   f64.mul
   f64.add
  )
- (func $~lib/math/NativeMath.log (param $0 f64) (result f64)
-  (local $1 f64)
-  (local $2 i64)
+ (func $~lib/util/math/log_lut (param $0 f64) (result f64)
+  (local $1 i64)
+  (local $2 f64)
   (local $3 f64)
   (local $4 f64)
   (local $5 f64)
@@ -1306,411 +1298,417 @@
   (local $8 f64)
   (local $9 f64)
   (local $10 f64)
-  (local $11 f64)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i32)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
   (local $15 i64)
-  (local $16 i64)
+  (local $16 f64)
   (local $17 f64)
   (local $18 f64)
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/log_lut|inlined.0 (result f64)
+  (local $19 f64)
+  (local $20 f64)
+  (local $21 f64)
+  (local $22 f64)
+  (local $23 f64)
+  (local $24 f64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $1
+  local.get $1
+  i64.const 4606619468846596096
+  i64.sub
+  i64.const 4607473789381378048
+  i64.const 4606619468846596096
+  i64.sub
+  i64.lt_u
+  if
    local.get $0
-   local.set $1
-   local.get $1
-   i64.reinterpret_f64
+   f64.const 1
+   f64.sub
    local.set $2
    local.get $2
-   i64.const 4606619468846596096
-   i64.sub
-   i64.const 4607473789381378048
-   i64.const 4606619468846596096
-   i64.sub
-   i64.lt_u
-   if
-    local.get $1
-    f64.const 1
-    f64.sub
-    local.set $3
-    local.get $3
-    local.get $3
-    f64.mul
-    local.set $4
-    local.get $4
-    local.get $3
-    f64.mul
-    local.set $5
-    local.get $5
-    f64.const 0.3333333333333352
-    local.get $3
-    f64.const -0.24999999999998432
-    f64.mul
-    f64.add
-    local.get $4
-    f64.const 0.19999999999320328
-    f64.mul
-    f64.add
-    local.get $5
-    f64.const -0.16666666669929706
-    local.get $3
-    f64.const 0.14285715076560868
-    f64.mul
-    f64.add
-    local.get $4
-    f64.const -0.12499997863982555
-    f64.mul
-    f64.add
-    local.get $5
-    f64.const 0.11110712032936046
-    local.get $3
-    f64.const -0.10000486757818193
-    f64.mul
-    f64.add
-    local.get $4
-    f64.const 0.09181994006195467
-    f64.mul
-    f64.add
-    local.get $5
-    f64.const -0.08328363062289341
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    f64.mul
-    local.set $6
-    local.get $3
-    f64.const 134217728
-    f64.mul
-    local.set $7
-    local.get $3
-    local.get $7
-    f64.add
-    local.get $7
-    f64.sub
-    local.set $8
-    local.get $3
-    local.get $8
-    f64.sub
-    local.set $9
-    local.get $8
-    local.get $8
-    f64.mul
-    f64.const -0.5
-    f64.mul
-    local.set $7
-    local.get $3
-    local.get $7
-    f64.add
-    local.set $10
-    local.get $3
-    local.get $10
-    f64.sub
-    local.get $7
-    f64.add
-    local.set $11
-    local.get $11
-    f64.const -0.5
-    local.get $9
-    f64.mul
-    local.get $8
-    local.get $3
-    f64.add
-    f64.mul
-    f64.add
-    local.set $11
-    local.get $6
-    local.get $11
-    f64.add
-    local.get $10
-    f64.add
-    br $~lib/util/math/log_lut|inlined.0
-   end
-   local.get $2
-   i64.const 48
-   i64.shr_u
-   i32.wrap_i64
-   local.set $12
-   local.get $12
-   i32.const 16
-   i32.sub
-   i32.const 32752
-   i32.const 16
-   i32.sub
-   i32.ge_u
-   if
-    local.get $2
-    i64.const 1
-    i64.shl
-    i64.const 0
-    i64.eq
-    if
-     f64.const -1
-     local.get $1
-     local.get $1
-     f64.mul
-     f64.div
-     br $~lib/util/math/log_lut|inlined.0
-    end
-    local.get $2
-    f64.const inf
-    i64.reinterpret_f64
-    i64.eq
-    if
-     local.get $1
-     br $~lib/util/math/log_lut|inlined.0
-    end
-    local.get $12
-    i32.const 32768
-    i32.and
-    if (result i32)
-     i32.const 1
-    else
-     local.get $12
-     i32.const 32752
-     i32.and
-     i32.const 32752
-     i32.eq
-    end
-    if
-     local.get $1
-     local.get $1
-     f64.sub
-     local.get $1
-     local.get $1
-     f64.sub
-     f64.div
-     br $~lib/util/math/log_lut|inlined.0
-    end
-    local.get $1
-    f64.const 4503599627370496
-    f64.mul
-    i64.reinterpret_f64
-    local.set $2
-    local.get $2
-    i64.const 52
-    i64.const 52
-    i64.shl
-    i64.sub
-    local.set $2
-   end
-   local.get $2
-   i64.const 4604367669032910848
-   i64.sub
-   local.set $13
-   local.get $13
-   i64.const 52
-   i64.const 7
-   i64.sub
-   i64.shr_u
-   i64.const 127
-   i64.and
-   i32.wrap_i64
-   local.set $14
-   local.get $13
-   i64.const 52
-   i64.shr_s
-   local.set $15
    local.get $2
-   local.get $13
-   i64.const 4095
-   i64.const 52
-   i64.shl
-   i64.and
-   i64.sub
-   local.set $16
-   i32.const 56
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $11
-   i32.const 56
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $10
-   local.get $16
-   f64.reinterpret_i64
-   local.set $9
-   i32.const 2104
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $8
-   i32.const 2104
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $7
-   local.get $9
-   local.get $8
-   f64.sub
-   local.get $7
-   f64.sub
-   local.get $11
    f64.mul
-   local.set $6
-   local.get $15
-   f64.convert_i64_s
-   local.set $5
-   local.get $5
-   f64.const 0.6931471805598903
+   local.set $3
+   local.get $3
+   local.get $2
    f64.mul
-   local.get $10
-   f64.add
    local.set $4
    local.get $4
-   local.get $6
+   f64.const 0.3333333333333352
+   local.get $2
+   f64.const -0.24999999999998432
+   f64.mul
    f64.add
-   local.set $3
-   local.get $4
    local.get $3
-   f64.sub
-   local.get $6
-   f64.add
-   local.get $5
-   f64.const 5.497923018708371e-14
+   f64.const 0.19999999999320328
    f64.mul
    f64.add
-   local.set $17
-   local.get $6
-   local.get $6
+   local.get $4
+   f64.const -0.16666666669929706
+   local.get $2
+   f64.const 0.14285715076560868
    f64.mul
-   local.set $18
-   local.get $17
-   local.get $18
-   f64.const -0.5000000000000001
+   f64.add
+   local.get $3
+   f64.const -0.12499997863982555
    f64.mul
    f64.add
-   local.get $6
-   local.get $18
+   local.get $4
+   f64.const 0.11110712032936046
+   local.get $2
+   f64.const -0.10000486757818193
    f64.mul
-   f64.const 0.33333333331825593
-   local.get $6
-   f64.const -0.2499999999622955
+   f64.add
+   local.get $3
+   f64.const 0.09181994006195467
    f64.mul
    f64.add
-   local.get $18
-   f64.const 0.20000304511814496
-   local.get $6
-   f64.const -0.16667054827627667
+   local.get $4
+   f64.const -0.08328363062289341
    f64.mul
    f64.add
    f64.mul
    f64.add
    f64.mul
    f64.add
-   local.get $3
+   f64.mul
+   local.set $5
+   local.get $2
+   f64.const 134217728
+   f64.mul
+   local.set $6
+   local.get $2
+   local.get $6
    f64.add
-  end
-  return
- )
- (func $~lib/math/NativeMath.acosh (param $0 f64) (result f64)
-  (local $1 i64)
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 52
-  i64.shr_u
-  i64.const 2047
-  i64.and
-  local.set $1
-  local.get $1
-  i64.const 1023
-  i64.const 1
-  i64.add
-  i64.lt_u
-  if
-   local.get $0
-   f64.const 1
-   f64.sub
-   local.get $0
-   f64.const 1
+   local.get $6
    f64.sub
-   local.get $0
-   f64.const 1
+   local.set $7
+   local.get $2
+   local.get $7
    f64.sub
+   local.set $8
+   local.get $7
+   local.get $7
    f64.mul
-   f64.const 2
-   local.get $0
-   f64.const 1
-   f64.sub
+   f64.const -0.5
    f64.mul
+   local.set $6
+   local.get $2
+   local.get $6
    f64.add
-   f64.sqrt
+   local.set $9
+   local.get $2
+   local.get $9
+   f64.sub
+   local.get $6
    f64.add
-   call $~lib/math/NativeMath.log1p
-   return
-  end
-  local.get $1
-  i64.const 1023
-  i64.const 26
-  i64.add
-  i64.lt_u
-  if
-   f64.const 2
-   local.get $0
+   local.set $10
+   local.get $10
+   f64.const -0.5
+   local.get $8
    f64.mul
-   f64.const 1
-   local.get $0
-   local.get $0
-   local.get $0
+   local.get $7
+   local.get $2
+   f64.add
    f64.mul
-   f64.const 1
-   f64.sub
-   f64.sqrt
    f64.add
-   f64.div
-   f64.sub
-   call $~lib/math/NativeMath.log
+   local.set $10
+   local.get $5
+   local.get $10
+   f64.add
+   local.get $9
+   f64.add
    return
   end
-  local.get $0
-  call $~lib/math/NativeMath.log
-  f64.const 0.6931471805599453
-  f64.add
- )
- (func $std/math/test_acosh (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMath.acosh
   local.get $1
-  local.get $2
-  local.get $3
-  call $std/math/check<f64>
-  if (result i32)
-   global.get $std/math/js
-   i32.eqz
+  i64.const 48
+  i64.shr_u
+  i32.wrap_i64
+  local.set $11
+  local.get $11
+  i32.const 16
+  i32.sub
+  i32.const 32752
+  i32.const 16
+  i32.sub
+  i32.ge_u
+  if
+   local.get $1
+   i64.const 1
+   i64.shl
+   i64.const 0
+   i64.eq
+   if
+    f64.const -1
+    local.get $0
+    local.get $0
+    f64.mul
+    f64.div
+    return
+   end
+   local.get $1
+   f64.const inf
+   i64.reinterpret_f64
+   i64.eq
+   if
+    local.get $0
+    return
+   end
+   local.get $11
+   i32.const 32768
+   i32.and
    if (result i32)
     i32.const 1
    else
-    local.get $0
-    call $~lib/bindings/Math/acosh
-    local.get $1
-    local.get $2
-    local.get $3
-    call $std/math/check<f64>
+    local.get $11
+    i32.const 32752
+    i32.and
+    i32.const 32752
+    i32.eq
    end
-  else
+   if
+    local.get $0
+    local.get $0
+    f64.sub
+    local.get $0
+    local.get $0
+    f64.sub
+    f64.div
+    return
+   end
+   local.get $0
+   f64.const 4503599627370496
+   f64.mul
+   i64.reinterpret_f64
+   local.set $1
+   local.get $1
+   i64.const 52
+   i64.const 52
+   i64.shl
+   i64.sub
+   local.set $1
+  end
+  local.get $1
+  i64.const 4604367669032910848
+  i64.sub
+  local.set $12
+  local.get $12
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shr_u
+  i64.const 127
+  i64.and
+  i32.wrap_i64
+  local.set $13
+  local.get $12
+  i64.const 52
+  i64.shr_s
+  local.set $14
+  local.get $1
+  local.get $12
+  i64.const 4095
+  i64.const 52
+  i64.shl
+  i64.and
+  i64.sub
+  local.set $15
+  i32.const 56
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $16
+  i32.const 56
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $17
+  local.get $15
+  f64.reinterpret_i64
+  local.set $18
+  i32.const 2104
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $10
+  i32.const 2104
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $9
+  local.get $18
+  local.get $10
+  f64.sub
+  local.get $9
+  f64.sub
+  local.get $16
+  f64.mul
+  local.set $19
+  local.get $14
+  f64.convert_i64_s
+  local.set $20
+  local.get $20
+  f64.const 0.6931471805598903
+  f64.mul
+  local.get $17
+  f64.add
+  local.set $21
+  local.get $21
+  local.get $19
+  f64.add
+  local.set $22
+  local.get $21
+  local.get $22
+  f64.sub
+  local.get $19
+  f64.add
+  local.get $20
+  f64.const 5.497923018708371e-14
+  f64.mul
+  f64.add
+  local.set $23
+  local.get $19
+  local.get $19
+  f64.mul
+  local.set $24
+  local.get $23
+  local.get $24
+  f64.const -0.5000000000000001
+  f64.mul
+  f64.add
+  local.get $19
+  local.get $24
+  f64.mul
+  f64.const 0.33333333331825593
+  local.get $19
+  f64.const -0.2499999999622955
+  f64.mul
+  f64.add
+  local.get $24
+  f64.const 0.20000304511814496
+  local.get $19
+  f64.const -0.16667054827627667
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $22
+  f64.add
+ )
+ (func $~lib/math/NativeMath.log (param $0 f64) (result f64)
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  call $~lib/util/math/log_lut
+  return
+ )
+ (func $~lib/math/NativeMath.acosh (param $0 f64) (result f64)
+  (local $1 i64)
+  local.get $0
+  i64.reinterpret_f64
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  local.set $1
+  local.get $1
+  i64.const 1023
+  i64.const 1
+  i64.add
+  i64.lt_u
+  if
+   local.get $0
+   f64.const 1
+   f64.sub
+   local.get $0
+   f64.const 1
+   f64.sub
+   local.get $0
+   f64.const 1
+   f64.sub
+   f64.mul
+   f64.const 2
+   local.get $0
+   f64.const 1
+   f64.sub
+   f64.mul
+   f64.add
+   f64.sqrt
+   f64.add
+   call $~lib/math/NativeMath.log1p
+   return
+  end
+  local.get $1
+  i64.const 1023
+  i64.const 26
+  i64.add
+  i64.lt_u
+  if
+   f64.const 2
+   local.get $0
+   f64.mul
+   f64.const 1
+   local.get $0
+   local.get $0
+   local.get $0
+   f64.mul
+   f64.const 1
+   f64.sub
+   f64.sqrt
+   f64.add
+   f64.div
+   f64.sub
+   call $~lib/math/NativeMath.log
+   return
+  end
+  local.get $0
+  call $~lib/math/NativeMath.log
+  f64.const 0.6931471805599453
+  f64.add
+ )
+ (func $std/math/test_acosh (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.acosh
+  local.get $1
+  local.get $2
+  local.get $3
+  call $std/math/check<f64>
+  if (result i32)
+   global.get $std/math/js
+   i32.eqz
+   if (result i32)
+    i32.const 1
+   else
+    local.get $0
+    call $~lib/bindings/Math/acosh
+    local.get $1
+    local.get $2
+    local.get $3
+    call $std/math/check<f64>
+   end
+  else
    i32.const 0
   end
  )
@@ -1925,175 +1923,174 @@
   f32.mul
   f32.add
  )
- (func $~lib/math/NativeMathf.log (param $0 f32) (result f32)
-  (local $1 f32)
+ (func $~lib/util/math/logf_lut (param $0 f32) (result f32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 f64)
   (local $7 f64)
   (local $8 f64)
   (local $9 f64)
   (local $10 f64)
   (local $11 f64)
   (local $12 f64)
-  (local $13 f64)
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/logf_lut|inlined.0 (result f32)
-   local.get $0
-   local.set $1
+  local.get $0
+  i32.reinterpret_f32
+  local.set $1
+  local.get $1
+  i32.const 8388608
+  i32.sub
+  i32.const 2139095040
+  i32.const 8388608
+  i32.sub
+  i32.ge_u
+  if
+   local.get $1
+   i32.const 1
+   i32.shl
+   i32.const 0
+   i32.eq
+   if
+    f32.const inf
+    f32.neg
+    return
+   end
    local.get $1
-   i32.reinterpret_f32
-   local.set $2
-   local.get $2
-   i32.const 8388608
-   i32.sub
    i32.const 2139095040
-   i32.const 8388608
-   i32.sub
-   i32.ge_u
+   i32.eq
    if
-    local.get $2
+    local.get $0
+    return
+   end
+   local.get $1
+   i32.const 31
+   i32.shr_u
+   if (result i32)
     i32.const 1
-    i32.shl
-    i32.const 0
-    i32.eq
-    if
-     f32.const inf
-     f32.neg
-     br $~lib/util/math/logf_lut|inlined.0
-    end
-    local.get $2
-    i32.const 2139095040
-    i32.eq
-    if
-     local.get $1
-     br $~lib/util/math/logf_lut|inlined.0
-    end
-    local.get $2
-    i32.const 31
-    i32.shr_u
-    if (result i32)
-     i32.const 1
-    else
-     local.get $2
-     i32.const 1
-     i32.shl
-     i32.const -16777216
-     i32.ge_u
-    end
-    if
-     local.get $1
-     local.get $1
-     f32.sub
-     local.get $1
-     local.get $1
-     f32.sub
-     f32.div
-     br $~lib/util/math/logf_lut|inlined.0
-    end
+   else
     local.get $1
-    f32.const 8388608
-    f32.mul
-    i32.reinterpret_f32
-    local.set $2
-    local.get $2
-    i32.const 23
-    i32.const 23
+    i32.const 1
     i32.shl
-    i32.sub
-    local.set $2
+    i32.const -16777216
+    i32.ge_u
    end
-   local.get $2
-   i32.const 1060306944
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const 23
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 15
-   i32.and
-   local.set $4
-   local.get $3
+   if
+    local.get $0
+    local.get $0
+    f32.sub
+    local.get $0
+    local.get $0
+    f32.sub
+    f32.div
+    return
+   end
+   local.get $0
+   f32.const 8388608
+   f32.mul
+   i32.reinterpret_f32
+   local.set $1
+   local.get $1
    i32.const 23
-   i32.shr_s
-   local.set $5
-   local.get $2
-   local.get $3
-   i32.const 511
    i32.const 23
    i32.shl
-   i32.and
    i32.sub
-   local.set $6
-   i32.const 4152
-   local.get $4
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $7
-   i32.const 4152
-   local.get $4
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $8
-   local.get $6
-   f32.reinterpret_i32
-   f64.promote_f32
-   local.set $9
-   local.get $9
-   local.get $7
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $10
-   local.get $8
-   local.get $5
-   f64.convert_i32_s
-   f64.const 0.6931471805599453
-   f64.mul
-   f64.add
-   local.set $11
-   local.get $10
-   local.get $10
-   f64.mul
-   local.set $12
-   f64.const 0.333456765744066
-   local.get $10
-   f64.mul
-   f64.const -0.4999997485802103
-   f64.add
-   local.set $13
-   local.get $13
-   f64.const -0.25089342214237154
-   local.get $12
-   f64.mul
-   f64.add
-   local.set $13
-   local.get $13
-   local.get $12
-   f64.mul
-   local.get $11
-   local.get $10
-   f64.add
-   f64.add
-   local.set $13
-   local.get $13
-   f32.demote_f64
+   local.set $1
   end
+  local.get $1
+  i32.const 1060306944
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const 23
+  i32.const 4
+  i32.sub
+  i32.shr_u
+  i32.const 15
+  i32.and
+  local.set $3
+  local.get $2
+  i32.const 23
+  i32.shr_s
+  local.set $4
+  local.get $1
+  local.get $2
+  i32.const 511
+  i32.const 23
+  i32.shl
+  i32.and
+  i32.sub
+  local.set $5
+  i32.const 4152
+  local.get $3
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $6
+  i32.const 4152
+  local.get $3
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $7
+  local.get $5
+  f32.reinterpret_i32
+  f64.promote_f32
+  local.set $8
+  local.get $8
+  local.get $6
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $9
+  local.get $7
+  local.get $4
+  f64.convert_i32_s
+  f64.const 0.6931471805599453
+  f64.mul
+  f64.add
+  local.set $10
+  local.get $9
+  local.get $9
+  f64.mul
+  local.set $11
+  f64.const 0.333456765744066
+  local.get $9
+  f64.mul
+  f64.const -0.4999997485802103
+  f64.add
+  local.set $12
+  local.get $12
+  f64.const -0.25089342214237154
+  local.get $11
+  f64.mul
+  f64.add
+  local.set $12
+  local.get $12
+  local.get $11
+  f64.mul
+  local.get $10
+  local.get $9
+  f64.add
+  f64.add
+  local.set $12
+  local.get $12
+  f32.demote_f64
+ )
+ (func $~lib/math/NativeMathf.log (param $0 f32) (result f32)
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  call $~lib/util/math/logf_lut
   return
  )
  (func $~lib/math/NativeMathf.acosh (param $0 f32) (result f32)
@@ -4226,12 +4223,13 @@
   local.get $3
   call $std/math/check<f32>
  )
- (func $std/math/test_ceil (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  (local $4 f64)
+ (func $~lib/math/NativeMath.ceil (param $0 f64) (result f64)
   local.get $0
-  local.set $4
-  local.get $4
   f64.ceil
+ )
+ (func $std/math/test_ceil (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.ceil
   local.get $1
   local.get $2
   local.get $3
@@ -4253,16 +4251,222 @@
    i32.const 0
   end
  )
+ (func $~lib/math/NativeMathf.ceil (param $0 f32) (result f32)
+  local.get $0
+  f32.ceil
+ )
  (func $std/math/test_ceilf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
-  (local $4 f32)
   local.get $0
+  call $~lib/math/NativeMathf.ceil
+  local.get $1
+  local.get $2
+  local.get $3
+  call $std/math/check<f32>
+ )
+ (func $~lib/math/cos_kern (param $0 f64) (param $1 f64) (result f64)
+  (local $2 f64)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  local.get $0
+  local.get $0
+  f64.mul
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.mul
+  local.set $3
+  local.get $2
+  f64.const 0.0416666666666666
+  local.get $2
+  f64.const -0.001388888888887411
+  local.get $2
+  f64.const 2.480158728947673e-05
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  local.get $3
+  local.get $3
+  f64.mul
+  f64.const -2.7557314351390663e-07
+  local.get $2
+  f64.const 2.087572321298175e-09
+  local.get $2
+  f64.const -1.1359647557788195e-11
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
   local.set $4
+  f64.const 0.5
+  local.get $2
+  f64.mul
+  local.set $5
+  f64.const 1
+  local.get $5
+  f64.sub
+  local.set $3
+  local.get $3
+  f64.const 1
+  local.get $3
+  f64.sub
+  local.get $5
+  f64.sub
+  local.get $2
   local.get $4
-  f32.ceil
+  f64.mul
+  local.get $0
+  local.get $1
+  f64.mul
+  f64.sub
+  f64.add
+  f64.add
+ )
+ (func $~lib/math/umuldi (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $0
   local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $1
   local.get $2
   local.get $3
-  call $std/math/check<f32>
+  i64.mul
+  local.set $6
+  local.get $6
+  i64.const 4294967295
+  i64.and
+  local.set $4
+  local.get $0
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $6
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $1
+  i64.mul
+  local.get $6
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $6
+  local.get $0
+  local.get $1
+  i64.mul
+  local.get $5
+  i64.add
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  global.set $~lib/math/res128_hi
+  local.get $6
+  i64.const 32
+  i64.shl
+  local.get $4
+  i64.add
+ )
+ (func $~lib/math/pio2_right (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  local.get $1
+  i64.clz
+  local.set $2
+  local.get $1
+  local.get $2
+  i64.shl
+  local.get $0
+  i64.const 64
+  local.get $2
+  i64.sub
+  i64.shr_u
+  i64.or
+  local.set $1
+  local.get $0
+  local.get $2
+  i64.shl
+  local.set $0
+  i64.const -3958705157555305932
+  local.get $1
+  call $~lib/math/umuldi
+  local.set $3
+  global.get $~lib/math/res128_hi
+  local.set $4
+  local.get $4
+  i64.const 11
+  i64.shr_u
+  local.set $5
+  local.get $3
+  i64.const 11
+  i64.shr_u
+  local.get $4
+  i64.const 53
+  i64.shl
+  i64.or
+  local.set $6
+  f64.const 2.6469779601696886e-23
+  i64.const -4267615245585081135
+  f64.convert_i64_u
+  f64.mul
+  local.get $1
+  f64.convert_i64_u
+  f64.mul
+  f64.const 2.6469779601696886e-23
+  i64.const -3958705157555305932
+  f64.convert_i64_u
+  f64.mul
+  local.get $0
+  f64.convert_i64_u
+  f64.mul
+  f64.add
+  i64.trunc_f64_u
+  local.set $7
+  local.get $5
+  local.get $3
+  local.get $7
+  i64.lt_u
+  i64.extend_i32_u
+  i64.add
+  f64.convert_i64_u
+  global.set $~lib/math/rempio2_y0
+  f64.const 5.421010862427522e-20
+  local.get $6
+  local.get $7
+  i64.add
+  f64.convert_i64_u
+  f64.mul
+  global.set $~lib/math/rempio2_y1
+  local.get $2
  )
  (func $~lib/math/pio2_large_quot (param $0 f64) (param $1 i64) (result i32)
   (local $2 i64)
@@ -4291,15 +4495,7 @@
   (local $25 i64)
   (local $26 i64)
   (local $27 i64)
-  (local $28 i64)
-  (local $29 i64)
-  (local $30 i64)
-  (local $31 i64)
-  (local $32 i64)
-  (local $33 i64)
-  (local $34 i64)
-  (local $35 i64)
-  (local $36 f64)
+  (local $28 f64)
   local.get $1
   i64.const 9223372036854775807
   i64.and
@@ -4383,75 +4579,15 @@
   i64.or
   local.set $14
   local.get $7
-  local.set $13
   local.get $14
-  local.set $12
-  local.get $13
-  i64.const 4294967295
-  i64.and
+  call $~lib/math/umuldi
   local.set $15
-  local.get $12
-  i64.const 4294967295
-  i64.and
-  local.set $16
-  local.get $13
-  i64.const 32
-  i64.shr_u
-  local.set $13
-  local.get $12
-  i64.const 32
-  i64.shr_u
-  local.set $12
-  local.get $15
-  local.get $16
-  i64.mul
-  local.set $19
-  local.get $19
-  i64.const 4294967295
-  i64.and
-  local.set $17
-  local.get $13
-  local.get $16
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $19
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $15
-  local.get $12
-  i64.mul
-  local.get $19
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $19
-  local.get $13
-  local.get $12
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.set $~lib/math/res128_hi
-  local.get $19
-  i64.const 32
-  i64.shl
-  local.get $17
-  i64.add
-  local.set $20
   global.get $~lib/math/res128_hi
-  local.set $21
+  local.set $16
   local.get $6
   local.get $14
   i64.mul
-  local.set $22
+  local.set $17
   local.get $8
   i64.const 32
   i64.shr_u
@@ -4459,739 +4595,492 @@
   i64.const 32
   i64.shr_s
   i64.mul
-  local.set $23
-  local.get $20
-  local.get $23
+  local.set $18
+  local.get $15
+  local.get $18
   i64.add
-  local.set $24
-  local.get $22
-  local.get $21
+  local.set $19
+  local.get $17
+  local.get $16
   i64.add
-  local.get $24
-  local.get $23
+  local.get $19
+  local.get $18
   i64.lt_u
   i64.extend_i32_u
   i64.add
-  local.set $25
-  local.get $24
+  local.set $20
+  local.get $19
   i64.const 2
   i64.shl
-  local.set $26
-  local.get $25
+  local.set $21
+  local.get $20
   i64.const 2
   i64.shl
-  local.get $24
+  local.get $19
   i64.const 62
   i64.shr_u
   i64.or
-  local.set $27
-  local.get $27
+  local.set $22
+  local.get $22
   i64.const 63
   i64.shr_s
-  local.set $28
-  local.get $28
+  local.set $23
+  local.get $23
   i64.const 1
   i64.shr_s
-  local.set $29
-  local.get $25
+  local.set $24
+  local.get $20
   i64.const 62
   i64.shr_s
-  local.get $28
+  local.get $23
   i64.sub
-  local.set $30
+  local.set $25
   i64.const 4372995238176751616
-  local.get $26
-  local.get $28
+  local.get $21
+  local.get $23
   i64.xor
-  local.set $13
-  local.get $27
-  local.get $29
+  local.get $22
+  local.get $24
   i64.xor
-  local.set $12
-  local.get $12
-  i64.clz
-  local.set $19
-  local.get $12
-  local.get $19
-  i64.shl
-  local.get $13
-  i64.const 64
-  local.get $19
-  i64.sub
-  i64.shr_u
-  i64.or
-  local.set $12
-  local.get $13
-  local.get $19
-  i64.shl
-  local.set $13
-  i64.const -3958705157555305932
-  local.set $16
-  local.get $12
-  local.set $15
-  local.get $16
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $15
-  i64.const 4294967295
-  i64.and
-  local.set $17
-  local.get $16
-  i64.const 32
-  i64.shr_u
-  local.set $16
-  local.get $15
-  i64.const 32
-  i64.shr_u
-  local.set $15
-  local.get $18
-  local.get $17
-  i64.mul
-  local.set $33
-  local.get $33
-  i64.const 4294967295
-  i64.and
-  local.set $31
-  local.get $16
-  local.get $17
-  i64.mul
-  local.get $33
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $33
-  local.get $33
-  i64.const 32
-  i64.shr_u
-  local.set $32
-  local.get $18
-  local.get $15
-  i64.mul
-  local.get $33
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $33
-  local.get $16
-  local.get $15
-  i64.mul
-  local.get $32
-  i64.add
-  local.get $33
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.set $~lib/math/res128_hi
-  local.get $33
-  i64.const 32
-  i64.shl
-  local.get $31
-  i64.add
-  local.set $33
-  global.get $~lib/math/res128_hi
-  local.set $32
-  local.get $32
-  i64.const 11
-  i64.shr_u
-  local.set $31
-  local.get $33
-  i64.const 11
-  i64.shr_u
-  local.get $32
-  i64.const 53
-  i64.shl
-  i64.or
-  local.set $17
-  f64.const 2.6469779601696886e-23
-  i64.const -4267615245585081135
-  f64.convert_i64_u
-  f64.mul
-  local.get $12
-  f64.convert_i64_u
-  f64.mul
-  f64.const 2.6469779601696886e-23
-  i64.const -3958705157555305932
-  f64.convert_i64_u
-  f64.mul
-  local.get $13
-  f64.convert_i64_u
-  f64.mul
-  f64.add
-  i64.trunc_f64_u
-  local.set $18
-  local.get $31
-  local.get $33
-  local.get $18
-  i64.lt_u
-  i64.extend_i32_u
-  i64.add
-  f64.convert_i64_u
-  global.set $~lib/math/rempio2_y0
-  f64.const 5.421010862427522e-20
-  local.get $17
-  local.get $18
-  i64.add
-  f64.convert_i64_u
-  f64.mul
-  global.set $~lib/math/rempio2_y1
-  local.get $19
+  call $~lib/math/pio2_right
   i64.const 52
   i64.shl
   i64.sub
-  local.set $34
+  local.set $26
   local.get $1
-  local.get $27
+  local.get $22
   i64.xor
   i64.const -9223372036854775808
   i64.and
-  local.set $35
-  local.get $34
-  local.get $35
+  local.set $27
+  local.get $26
+  local.get $27
   i64.or
   f64.reinterpret_i64
-  local.set $36
+  local.set $28
   global.get $~lib/math/rempio2_y0
-  local.get $36
+  local.get $28
   f64.mul
   global.set $~lib/math/rempio2_y0
   global.get $~lib/math/rempio2_y1
-  local.get $36
+  local.get $28
   f64.mul
   global.set $~lib/math/rempio2_y1
-  local.get $30
+  local.get $25
   i32.wrap_i64
  )
- (func $~lib/math/NativeMath.cos (param $0 f64) (result f64)
-  (local $1 i64)
-  (local $2 i32)
+ (func $~lib/math/rempio2 (param $0 f64) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 f64)
+  (local $4 i32)
   (local $5 f64)
   (local $6 f64)
   (local $7 f64)
   (local $8 f64)
-  (local $9 f64)
+  (local $9 i32)
   (local $10 i32)
-  (local $11 i64)
-  (local $12 i32)
+  (local $11 f64)
+  (local $12 f64)
   (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i32)
-  (local $18 f64)
-  (local $19 f64)
-  local.get $0
-  i64.reinterpret_f64
-  local.set $1
   local.get $1
   i64.const 32
   i64.shr_u
   i32.wrap_i64
-  local.set $2
-  local.get $2
-  i32.const 31
-  i32.shr_u
-  local.set $3
-  local.get $2
   i32.const 2147483647
   i32.and
-  local.set $2
-  local.get $2
-  i32.const 1072243195
-  i32.le_u
+  local.set $3
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $3
+  i32.const 1073928572
+  i32.lt_u
   if
+   i32.const 1
+   local.set $4
    local.get $2
-   i32.const 1044816030
-   i32.lt_u
+   i32.eqz
    if
-    f64.const 1
-    return
-   end
-   local.get $0
-   local.set $5
-   f64.const 0
-   local.set $4
-   local.get $5
-   local.get $5
-   f64.mul
-   local.set $6
-   local.get $6
-   local.get $6
-   f64.mul
-   local.set $7
-   local.get $6
-   f64.const 0.0416666666666666
-   local.get $6
-   f64.const -0.001388888888887411
-   local.get $6
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $7
-   local.get $7
-   f64.mul
-   f64.const -2.7557314351390663e-07
-   local.get $6
-   f64.const 2.087572321298175e-09
-   local.get $6
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.set $8
-   f64.const 0.5
+    local.get $0
+    f64.const 1.5707963267341256
+    f64.sub
+    local.set $5
+    local.get $3
+    i32.const 1073291771
+    i32.ne
+    if
+     local.get $5
+     f64.const 6.077100506506192e-11
+     f64.sub
+     local.set $6
+     local.get $5
+     local.get $6
+     f64.sub
+     f64.const 6.077100506506192e-11
+     f64.sub
+     local.set $7
+    else
+     local.get $5
+     f64.const 6.077100506303966e-11
+     f64.sub
+     local.set $5
+     local.get $5
+     f64.const 2.0222662487959506e-21
+     f64.sub
+     local.set $6
+     local.get $5
+     local.get $6
+     f64.sub
+     f64.const 2.0222662487959506e-21
+     f64.sub
+     local.set $7
+    end
+   else
+    local.get $0
+    f64.const 1.5707963267341256
+    f64.add
+    local.set $5
+    local.get $3
+    i32.const 1073291771
+    i32.ne
+    if
+     local.get $5
+     f64.const 6.077100506506192e-11
+     f64.add
+     local.set $6
+     local.get $5
+     local.get $6
+     f64.sub
+     f64.const 6.077100506506192e-11
+     f64.add
+     local.set $7
+    else
+     local.get $5
+     f64.const 6.077100506303966e-11
+     f64.add
+     local.set $5
+     local.get $5
+     f64.const 2.0222662487959506e-21
+     f64.add
+     local.set $6
+     local.get $5
+     local.get $6
+     f64.sub
+     f64.const 2.0222662487959506e-21
+     f64.add
+     local.set $7
+    end
+    i32.const -1
+    local.set $4
+   end
    local.get $6
-   f64.mul
-   local.set $9
-   f64.const 1
-   local.get $9
-   f64.sub
-   local.set $7
+   global.set $~lib/math/rempio2_y0
    local.get $7
-   f64.const 1
-   local.get $7
-   f64.sub
-   local.get $9
-   f64.sub
-   local.get $6
-   local.get $8
-   f64.mul
-   local.get $5
+   global.set $~lib/math/rempio2_y1
    local.get $4
-   f64.mul
-   f64.sub
-   f64.add
-   f64.add
    return
   end
-  local.get $2
-  i32.const 2146435072
-  i32.ge_u
+  local.get $3
+  i32.const 1094263291
+  i32.lt_u
   if
    local.get $0
+   f64.const 0.6366197723675814
+   f64.mul
+   f64.nearest
+   local.set $7
    local.get $0
+   local.get $7
+   f64.const 1.5707963267341256
+   f64.mul
    f64.sub
-   return
-  end
-  block $~lib/math/rempio2|inlined.0 (result i32)
-   local.get $0
-   local.set $4
-   local.get $1
-   local.set $11
+   local.set $6
+   local.get $7
+   f64.const 6.077100506506192e-11
+   f64.mul
+   local.set $5
    local.get $3
-   local.set $10
-   local.get $11
+   i32.const 20
+   i32.shr_u
+   local.set $4
+   local.get $6
+   local.get $5
+   f64.sub
+   local.set $8
+   local.get $8
+   i64.reinterpret_f64
    i64.const 32
    i64.shr_u
    i32.wrap_i64
-   i32.const 2147483647
+   local.set $9
+   local.get $4
+   local.get $9
+   i32.const 20
+   i32.shr_u
+   i32.const 2047
    i32.and
-   local.set $12
-   i32.const 0
-   i32.const 1
-   i32.lt_s
-   drop
-   local.get $12
-   i32.const 1073928572
-   i32.lt_u
-   if
-    i32.const 1
-    local.set $13
-    local.get $10
-    i32.eqz
-    if
-     local.get $4
-     f64.const 1.5707963267341256
-     f64.sub
-     local.set $9
-     local.get $12
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $9
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $8
-      local.get $9
-      local.get $8
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $7
-     else
-      local.get $9
-      f64.const 6.077100506303966e-11
-      f64.sub
-      local.set $9
-      local.get $9
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $8
-      local.get $9
-      local.get $8
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $7
-     end
-    else
-     local.get $4
-     f64.const 1.5707963267341256
-     f64.add
-     local.set $9
-     local.get $12
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $9
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $8
-      local.get $9
-      local.get $8
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $7
-     else
-      local.get $9
-      f64.const 6.077100506303966e-11
-      f64.add
-      local.set $9
-      local.get $9
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $8
-      local.get $9
-      local.get $8
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $7
-     end
-     i32.const -1
-     local.set $13
-    end
-    local.get $8
-    global.set $~lib/math/rempio2_y0
-    local.get $7
-    global.set $~lib/math/rempio2_y1
-    local.get $13
-    br $~lib/math/rempio2|inlined.0
-   end
-   local.get $12
-   i32.const 1094263291
-   i32.lt_u
+   i32.sub
+   local.set $10
+   local.get $10
+   i32.const 16
+   i32.gt_u
    if
-    local.get $4
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.set $7
-    local.get $4
+    local.get $6
+    local.set $11
     local.get $7
-    f64.const 1.5707963267341256
+    f64.const 6.077100506303966e-11
     f64.mul
+    local.set $5
+    local.get $11
+    local.get $5
     f64.sub
-    local.set $8
+    local.set $6
     local.get $7
-    f64.const 6.077100506506192e-11
+    f64.const 2.0222662487959506e-21
     f64.mul
-    local.set $9
-    local.get $12
-    i32.const 20
-    i32.shr_u
-    local.set $13
-    local.get $8
-    local.get $9
+    local.get $11
+    local.get $6
     f64.sub
-    local.set $6
+    local.get $5
+    f64.sub
+    f64.sub
+    local.set $5
     local.get $6
+    local.get $5
+    f64.sub
+    local.set $8
+    local.get $8
     i64.reinterpret_f64
     i64.const 32
     i64.shr_u
     i32.wrap_i64
-    local.set $14
-    local.get $13
-    local.get $14
+    local.set $9
+    local.get $4
+    local.get $9
     i32.const 20
     i32.shr_u
     i32.const 2047
     i32.and
     i32.sub
-    local.set $15
-    local.get $15
-    i32.const 16
+    local.set $10
+    local.get $10
+    i32.const 49
     i32.gt_u
     if
-     local.get $8
-     local.set $5
-     local.get $7
-     f64.const 6.077100506303966e-11
-     f64.mul
-     local.set $9
-     local.get $5
-     local.get $9
-     f64.sub
-     local.set $8
+     local.get $6
+     local.set $12
      local.get $7
-     f64.const 2.0222662487959506e-21
+     f64.const 2.0222662487111665e-21
      f64.mul
+     local.set $5
+     local.get $12
      local.get $5
-     local.get $8
-     f64.sub
-     local.get $9
-     f64.sub
-     f64.sub
-     local.set $9
-     local.get $8
-     local.get $9
      f64.sub
      local.set $6
-     local.get $6
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     local.set $14
-     local.get $13
-     local.get $14
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     local.set $15
-     local.get $15
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $8
-      local.set $16
-      local.get $7
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.set $9
-      local.get $16
-      local.get $9
-      f64.sub
-      local.set $8
-      local.get $7
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $16
-      local.get $8
-      f64.sub
-      local.get $9
-      f64.sub
-      f64.sub
-      local.set $9
-      local.get $8
-      local.get $9
-      f64.sub
-      local.set $6
-     end
-    end
-    local.get $8
-    local.get $6
-    f64.sub
-    local.get $9
-    f64.sub
-    local.set $5
-    local.get $6
-    global.set $~lib/math/rempio2_y0
-    local.get $5
-    global.set $~lib/math/rempio2_y1
-    local.get $7
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.0
-   end
-   local.get $4
-   local.get $11
-   call $~lib/math/pio2_large_quot
-   local.set $15
-   i32.const 0
-   local.get $15
-   i32.sub
-   local.get $15
-   local.get $10
-   select
-  end
-  local.set $17
-  global.get $~lib/math/rempio2_y0
-  local.set $18
-  global.get $~lib/math/rempio2_y1
-  local.set $19
-  local.get $17
-  i32.const 1
-  i32.and
-  if (result f64)
-   block $~lib/math/sin_kern|inlined.0 (result f64)
-    local.get $18
-    local.set $7
-    local.get $19
-    local.set $16
-    i32.const 1
-    local.set $13
-    local.get $7
-    local.get $7
-    f64.mul
-    local.set $4
-    local.get $4
-    local.get $4
-    f64.mul
-    local.set $5
-    f64.const 0.00833333333332249
-    local.get $4
-    f64.const -1.984126982985795e-04
-    local.get $4
-    f64.const 2.7557313707070068e-06
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $4
-    local.get $5
-    f64.mul
-    f64.const -2.5050760253406863e-08
-    local.get $4
-    f64.const 1.58969099521155e-10
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $6
-    local.get $4
-    local.get $7
-    f64.mul
-    local.set $9
-    local.get $13
-    i32.eqz
-    if
-     local.get $7
-     local.get $9
-     f64.const -0.16666666666666632
-     local.get $4
-     local.get $6
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     br $~lib/math/sin_kern|inlined.0
-    else
      local.get $7
-     local.get $4
-     f64.const 0.5
-     local.get $16
+     f64.const 8.4784276603689e-32
      f64.mul
-     local.get $9
+     local.get $12
      local.get $6
-     f64.mul
      f64.sub
-     f64.mul
-     local.get $16
+     local.get $5
      f64.sub
-     local.get $9
-     f64.const -0.16666666666666632
-     f64.mul
      f64.sub
+     local.set $5
+     local.get $6
+     local.get $5
      f64.sub
-     br $~lib/math/sin_kern|inlined.0
+     local.set $8
     end
-    unreachable
    end
-  else
-   local.get $18
-   local.set $16
-   local.get $19
-   local.set $8
-   local.get $16
-   local.get $16
-   f64.mul
-   local.set $9
-   local.get $9
-   local.get $9
-   f64.mul
-   local.set $6
-   local.get $9
-   f64.const 0.0416666666666666
-   local.get $9
-   f64.const -0.001388888888887411
-   local.get $9
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
    local.get $6
+   local.get $8
+   f64.sub
+   local.get $5
+   f64.sub
+   local.set $11
+   local.get $8
+   global.set $~lib/math/rempio2_y0
+   local.get $11
+   global.set $~lib/math/rempio2_y1
+   local.get $7
+   i32.trunc_f64_s
+   return
+  end
+  local.get $0
+  local.get $1
+  call $~lib/math/pio2_large_quot
+  local.set $13
+  i32.const 0
+  local.get $13
+  i32.sub
+  local.get $13
+  local.get $2
+  select
+ )
+ (func $~lib/math/sin_kern (param $0 f64) (param $1 f64) (param $2 i32) (result f64)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  (local $6 f64)
+  local.get $0
+  local.get $0
+  f64.mul
+  local.set $3
+  local.get $3
+  local.get $3
+  f64.mul
+  local.set $4
+  f64.const 0.00833333333332249
+  local.get $3
+  f64.const -1.984126982985795e-04
+  local.get $3
+  f64.const 2.7557313707070068e-06
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $3
+  local.get $4
+  f64.mul
+  f64.const -2.5050760253406863e-08
+  local.get $3
+  f64.const 1.58969099521155e-10
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $5
+  local.get $3
+  local.get $0
+  f64.mul
+  local.set $6
+  local.get $2
+  i32.eqz
+  if
+   local.get $0
    local.get $6
-   f64.mul
-   f64.const -2.7557314351390663e-07
-   local.get $9
-   f64.const 2.087572321298175e-09
-   local.get $9
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
+   f64.const -0.16666666666666632
+   local.get $3
+   local.get $5
    f64.mul
    f64.add
    f64.mul
    f64.add
-   local.set $5
+   return
+  else
+   local.get $0
+   local.get $3
    f64.const 0.5
-   local.get $9
+   local.get $1
    f64.mul
-   local.set $4
-   f64.const 1
-   local.get $4
-   f64.sub
-   local.set $6
-   local.get $6
-   f64.const 1
    local.get $6
-   f64.sub
-   local.get $4
-   f64.sub
-   local.get $9
    local.get $5
    f64.mul
-   local.get $16
-   local.get $8
+   f64.sub
    f64.mul
+   local.get $1
    f64.sub
-   f64.add
-   f64.add
-  end
-  local.set $0
-  local.get $17
-  i32.const 1
-  i32.add
-  i32.const 2
-  i32.and
-  if (result f64)
-   local.get $0
-   f64.neg
-  else
-   local.get $0
+   local.get $6
+   f64.const -0.16666666666666632
+   f64.mul
+   f64.sub
+   f64.sub
+   return
   end
+  unreachable
  )
- (func $std/math/test_cos (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+ (func $~lib/math/NativeMath.cos (param $0 f64) (result f64)
+  (local $1 i64)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f64)
+  (local $6 f64)
   local.get $0
-  call $~lib/math/NativeMath.cos
+  i64.reinterpret_f64
+  local.set $1
   local.get $1
+  i64.const 32
+  i64.shr_u
+  i32.wrap_i64
+  local.set $2
   local.get $2
-  local.get $3
-  call $std/math/check<f64>
-  if (result i32)
+  i32.const 31
+  i32.shr_u
+  local.set $3
+  local.get $2
+  i32.const 2147483647
+  i32.and
+  local.set $2
+  local.get $2
+  i32.const 1072243195
+  i32.le_u
+  if
+   local.get $2
+   i32.const 1044816030
+   i32.lt_u
+   if
+    f64.const 1
+    return
+   end
+   local.get $0
+   f64.const 0
+   call $~lib/math/cos_kern
+   return
+  end
+  local.get $2
+  i32.const 2146435072
+  i32.ge_u
+  if
+   local.get $0
+   local.get $0
+   f64.sub
+   return
+  end
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/math/rempio2
+  local.set $4
+  global.get $~lib/math/rempio2_y0
+  local.set $5
+  global.get $~lib/math/rempio2_y1
+  local.set $6
+  local.get $4
+  i32.const 1
+  i32.and
+  if (result f64)
+   local.get $5
+   local.get $6
+   i32.const 1
+   call $~lib/math/sin_kern
+  else
+   local.get $5
+   local.get $6
+   call $~lib/math/cos_kern
+  end
+  local.set $0
+  local.get $4
+  i32.const 1
+  i32.add
+  i32.const 2
+  i32.and
+  if (result f64)
+   local.get $0
+   f64.neg
+  else
+   local.get $0
+  end
+ )
+ (func $std/math/test_cos (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.cos
+  local.get $1
+  local.get $2
+  local.get $3
+  call $std/math/check<f64>
+  if (result i32)
    global.get $std/math/js
    i32.eqz
    if (result i32)
@@ -5208,33 +5097,244 @@
    i32.const 0
   end
  )
+ (func $~lib/math/cos_kernf (param $0 f64) (result f32)
+  (local $1 f64)
+  (local $2 f64)
+  (local $3 f64)
+  local.get $0
+  local.get $0
+  f64.mul
+  local.set $1
+  local.get $1
+  local.get $1
+  f64.mul
+  local.set $2
+  f64.const -0.001388676377460993
+  local.get $1
+  f64.const 2.439044879627741e-05
+  f64.mul
+  f64.add
+  local.set $3
+  f32.const 1
+  f64.promote_f32
+  local.get $1
+  f64.const -0.499999997251031
+  f64.mul
+  f64.add
+  local.get $2
+  f64.const 0.04166662332373906
+  f64.mul
+  f64.add
+  local.get $2
+  local.get $1
+  f64.mul
+  local.get $3
+  f64.mul
+  f64.add
+  f32.demote_f64
+ )
+ (func $~lib/math/sin_kernf (param $0 f64) (result f32)
+  (local $1 f64)
+  (local $2 f64)
+  (local $3 f64)
+  (local $4 f64)
+  local.get $0
+  local.get $0
+  f64.mul
+  local.set $1
+  local.get $1
+  local.get $1
+  f64.mul
+  local.set $2
+  f64.const -1.9839334836096632e-04
+  local.get $1
+  f64.const 2.718311493989822e-06
+  f64.mul
+  f64.add
+  local.set $3
+  local.get $1
+  local.get $0
+  f64.mul
+  local.set $4
+  local.get $0
+  local.get $4
+  f64.const -0.16666666641626524
+  local.get $1
+  f64.const 0.008333329385889463
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $4
+  local.get $2
+  f64.mul
+  local.get $3
+  f64.mul
+  f64.add
+  f32.demote_f64
+ )
+ (func $~lib/math/pio2f_large_quot (param $0 f32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  (local $9 i64)
+  (local $10 i64)
+  (local $11 i64)
+  (local $12 i64)
+  (local $13 i32)
+  local.get $1
+  i32.const 23
+  i32.shr_s
+  i32.const 152
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const 63
+  i32.and
+  i64.extend_i32_s
+  local.set $3
+  i32.const 4600
+  local.get $2
+  i32.const 6
+  i32.shr_s
+  i32.const 3
+  i32.shl
+  i32.add
+  local.set $4
+  local.get $4
+  i64.load
+  local.set $5
+  local.get $4
+  i64.load offset=8
+  local.set $6
+  local.get $3
+  i64.const 32
+  i64.gt_u
+  if
+   local.get $4
+   i64.load offset=16
+   local.set $8
+   local.get $8
+   i64.const 96
+   local.get $3
+   i64.sub
+   i64.shr_u
+   local.set $7
+   local.get $7
+   local.get $6
+   local.get $3
+   i64.const 32
+   i64.sub
+   i64.shl
+   i64.or
+   local.set $7
+  else
+   local.get $6
+   i64.const 32
+   local.get $3
+   i64.sub
+   i64.shr_u
+   local.set $7
+  end
+  local.get $6
+  i64.const 64
+  local.get $3
+  i64.sub
+  i64.shr_u
+  local.get $5
+  local.get $3
+  i64.shl
+  i64.or
+  local.set $9
+  local.get $1
+  i32.const 8388607
+  i32.and
+  i32.const 8388608
+  i32.or
+  i64.extend_i32_s
+  local.set $10
+  local.get $10
+  local.get $9
+  i64.mul
+  local.get $10
+  local.get $7
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $11
+  local.get $11
+  i64.const 2
+  i64.shl
+  local.set $12
+  local.get $11
+  i64.const 62
+  i64.shr_u
+  local.get $12
+  i64.const 63
+  i64.shr_u
+  i64.add
+  i32.wrap_i64
+  local.set $13
+  f64.const 8.515303950216386e-20
+  local.get $0
+  f64.promote_f32
+  f64.copysign
+  local.get $12
+  f64.convert_i64_s
+  f64.mul
+  global.set $~lib/math/rempio2f_y
+  local.get $13
+ )
+ (func $~lib/math/rempio2f (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 f64)
+  (local $4 i32)
+  local.get $1
+  i32.const 1305022427
+  i32.lt_u
+  if
+   local.get $0
+   f64.promote_f32
+   f64.const 0.6366197723675814
+   f64.mul
+   f64.nearest
+   local.set $3
+   local.get $0
+   f64.promote_f32
+   local.get $3
+   f64.const 1.5707963109016418
+   f64.mul
+   f64.sub
+   local.get $3
+   f64.const 1.5893254773528196e-08
+   f64.mul
+   f64.sub
+   global.set $~lib/math/rempio2f_y
+   local.get $3
+   i32.trunc_f64_s
+   return
+  end
+  local.get $0
+  local.get $1
+  call $~lib/math/pio2f_large_quot
+  local.set $4
+  i32.const 0
+  local.get $4
+  i32.sub
+  local.get $4
+  local.get $2
+  select
+ )
  (func $~lib/math/NativeMathf.cos (param $0 f32) (result f32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 f64)
+  (local $3 i32)
   (local $4 f64)
-  (local $5 f64)
-  (local $6 f64)
-  (local $7 f64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 f32)
-  (local $11 i32)
-  (local $12 f32)
-  (local $13 i32)
-  (local $14 i64)
-  (local $15 i32)
-  (local $16 i64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i32)
-  (local $24 i32)
-  (local $25 f64)
-  (local $26 f32)
+  (local $5 f32)
   local.get $0
   i32.reinterpret_f32
   local.set $1
@@ -5259,38 +5359,7 @@
    end
    local.get $0
    f64.promote_f32
-   local.set $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.set $4
-   local.get $4
-   local.get $4
-   f64.mul
-   local.set $5
-   f64.const -0.001388676377460993
-   local.get $4
-   f64.const 2.439044879627741e-05
-   f64.mul
-   f64.add
-   local.set $6
-   f32.const 1
-   f64.promote_f32
-   local.get $4
-   f64.const -0.499999997251031
-   f64.mul
-   f64.add
-   local.get $5
-   f64.const 0.04166662332373906
-   f64.mul
-   f64.add
-   local.get $5
-   local.get $4
-   f64.mul
-   local.get $6
-   f64.mul
-   f64.add
-   f32.demote_f64
+   call $~lib/math/cos_kernf
    return
   end
   i32.const 0
@@ -5317,38 +5386,7 @@
      f64.const 3.141592653589793
      f64.sub
     end
-    local.set $3
-    local.get $3
-    local.get $3
-    f64.mul
-    local.set $6
-    local.get $6
-    local.get $6
-    f64.mul
-    local.set $5
-    f64.const -0.001388676377460993
-    local.get $6
-    f64.const 2.439044879627741e-05
-    f64.mul
-    f64.add
-    local.set $4
-    f32.const 1
-    f64.promote_f32
-    local.get $6
-    f64.const -0.499999997251031
-    f64.mul
-    f64.add
-    local.get $5
-    f64.const 0.04166662332373906
-    f64.mul
-    f64.add
-    local.get $5
-    local.get $6
-    f64.mul
-    local.get $4
-    f64.mul
-    f64.add
-    f32.demote_f64
+    call $~lib/math/cos_kernf
     f32.neg
     return
    else
@@ -5358,81 +5396,13 @@
      f64.promote_f32
      f64.const 1.5707963267948966
      f64.add
-     local.set $3
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $4
-     local.get $4
-     local.get $4
-     f64.mul
-     local.set $5
-     f64.const -1.9839334836096632e-04
-     local.get $4
-     f64.const 2.718311493989822e-06
-     f64.mul
-     f64.add
-     local.set $6
-     local.get $4
-     local.get $3
-     f64.mul
-     local.set $7
-     local.get $3
-     local.get $7
-     f64.const -0.16666666641626524
-     local.get $4
-     f64.const 0.008333329385889463
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     local.get $7
-     local.get $5
-     f64.mul
-     local.get $6
-     f64.mul
-     f64.add
-     f32.demote_f64
+     call $~lib/math/sin_kernf
     else
      f64.const 1.5707963267948966
      local.get $0
      f64.promote_f32
      f64.sub
-     local.set $3
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $7
-     local.get $7
-     local.get $7
-     f64.mul
-     local.set $6
-     f64.const -1.9839334836096632e-04
-     local.get $7
-     f64.const 2.718311493989822e-06
-     f64.mul
-     f64.add
-     local.set $5
-     local.get $7
-     local.get $3
-     f64.mul
-     local.set $4
-     local.get $3
-     local.get $4
-     f64.const -0.16666666641626524
-     local.get $7
-     f64.const 0.008333329385889463
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     local.get $4
-     local.get $6
-     f64.mul
-     local.get $5
-     f64.mul
-     f64.add
-     f32.demote_f64
+     call $~lib/math/sin_kernf
     end
     return
    end
@@ -5458,38 +5428,7 @@
      f64.const 6.283185307179586
      f64.sub
     end
-    local.set $3
-    local.get $3
-    local.get $3
-    f64.mul
-    local.set $4
-    local.get $4
-    local.get $4
-    f64.mul
-    local.set $5
-    f64.const -0.001388676377460993
-    local.get $4
-    f64.const 2.439044879627741e-05
-    f64.mul
-    f64.add
-    local.set $6
-    f32.const 1
-    f64.promote_f32
-    local.get $4
-    f64.const -0.499999997251031
-    f64.mul
-    f64.add
-    local.get $5
-    f64.const 0.04166662332373906
-    f64.mul
-    f64.add
-    local.get $5
-    local.get $4
-    f64.mul
-    local.get $6
-    f64.mul
-    f64.add
-    f32.demote_f64
+    call $~lib/math/cos_kernf
     return
    else
     local.get $2
@@ -5499,81 +5438,13 @@
      f64.promote_f32
      f64.const 4.71238898038469
      f64.sub
-     local.set $7
-     local.get $7
-     local.get $7
-     f64.mul
-     local.set $6
-     local.get $6
-     local.get $6
-     f64.mul
-     local.set $5
-     f64.const -1.9839334836096632e-04
-     local.get $6
-     f64.const 2.718311493989822e-06
-     f64.mul
-     f64.add
-     local.set $4
-     local.get $6
-     local.get $7
-     f64.mul
-     local.set $3
-     local.get $7
-     local.get $3
-     f64.const -0.16666666641626524
-     local.get $6
-     f64.const 0.008333329385889463
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     local.get $3
-     local.get $5
-     f64.mul
-     local.get $4
-     f64.mul
-     f64.add
-     f32.demote_f64
+     call $~lib/math/sin_kernf
     else
      local.get $0
      f64.promote_f32
      f64.const 4.71238898038469
      f64.sub
-     local.set $7
-     local.get $7
-     local.get $7
-     f64.mul
-     local.set $3
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $4
-     f64.const -1.9839334836096632e-04
-     local.get $3
-     f64.const 2.718311493989822e-06
-     f64.mul
-     f64.add
-     local.set $5
-     local.get $3
-     local.get $7
-     f64.mul
-     local.set $6
-     local.get $7
-     local.get $6
-     f64.const -0.16666666641626524
-     local.get $3
-     f64.const 0.008333329385889463
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     local.get $6
-     local.get $4
-     f64.mul
-     local.get $5
-     f64.mul
-     f64.add
-     f32.demote_f64
+     call $~lib/math/sin_kernf
     end
     return
    end
@@ -5588,242 +5459,34 @@
    f32.sub
    return
   end
-  block $~lib/math/rempio2f|inlined.0 (result i32)
-   local.get $0
-   local.set $10
-   local.get $1
-   local.set $9
-   local.get $2
-   local.set $8
-   local.get $9
-   i32.const 1305022427
-   i32.lt_u
-   if
-    local.get $10
-    f64.promote_f32
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.set $6
-    local.get $10
-    f64.promote_f32
-    local.get $6
-    f64.const 1.5707963109016418
-    f64.mul
-    f64.sub
-    local.get $6
-    f64.const 1.5893254773528196e-08
-    f64.mul
-    f64.sub
-    global.set $~lib/math/rempio2f_y
-    local.get $6
-    i32.trunc_f64_s
-    br $~lib/math/rempio2f|inlined.0
-   end
-   local.get $10
-   local.set $12
-   local.get $9
-   local.set $11
-   local.get $11
-   i32.const 23
-   i32.shr_s
-   i32.const 152
-   i32.sub
-   local.set $13
-   local.get $13
-   i32.const 63
-   i32.and
-   i64.extend_i32_s
-   local.set $14
-   i32.const 4600
-   local.get $13
-   i32.const 6
-   i32.shr_s
-   i32.const 3
-   i32.shl
-   i32.add
-   local.set $15
-   local.get $15
-   i64.load
-   local.set $16
-   local.get $15
-   i64.load offset=8
-   local.set $17
-   local.get $14
-   i64.const 32
-   i64.gt_u
-   if
-    local.get $15
-    i64.load offset=16
-    local.set $19
-    local.get $19
-    i64.const 96
-    local.get $14
-    i64.sub
-    i64.shr_u
-    local.set $18
-    local.get $18
-    local.get $17
-    local.get $14
-    i64.const 32
-    i64.sub
-    i64.shl
-    i64.or
-    local.set $18
-   else
-    local.get $17
-    i64.const 32
-    local.get $14
-    i64.sub
-    i64.shr_u
-    local.set $18
-   end
-   local.get $17
-   i64.const 64
-   local.get $14
-   i64.sub
-   i64.shr_u
-   local.get $16
-   local.get $14
-   i64.shl
-   i64.or
-   local.set $19
-   local.get $11
-   i32.const 8388607
-   i32.and
-   i32.const 8388608
-   i32.or
-   i64.extend_i32_s
-   local.set $20
-   local.get $20
-   local.get $19
-   i64.mul
-   local.get $20
-   local.get $18
-   i64.mul
-   i64.const 32
-   i64.shr_u
-   i64.add
-   local.set $21
-   local.get $21
-   i64.const 2
-   i64.shl
-   local.set $22
-   local.get $21
-   i64.const 62
-   i64.shr_u
-   local.get $22
-   i64.const 63
-   i64.shr_u
-   i64.add
-   i32.wrap_i64
-   local.set $23
-   f64.const 8.515303950216386e-20
-   local.get $12
-   f64.promote_f32
-   f64.copysign
-   local.get $22
-   f64.convert_i64_s
-   f64.mul
-   global.set $~lib/math/rempio2f_y
-   local.get $23
-   local.set $23
-   i32.const 0
-   local.get $23
-   i32.sub
-   local.get $23
-   local.get $8
-   select
-  end
-  local.set $24
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/math/rempio2f
+  local.set $3
   global.get $~lib/math/rempio2f_y
-  local.set $25
-  local.get $24
+  local.set $4
+  local.get $3
   i32.const 1
   i32.and
   if (result f32)
-   local.get $25
-   local.set $7
-   local.get $7
-   local.get $7
-   f64.mul
-   local.set $6
-   local.get $6
-   local.get $6
-   f64.mul
-   local.set $5
-   f64.const -1.9839334836096632e-04
-   local.get $6
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   local.set $4
-   local.get $6
-   local.get $7
-   f64.mul
-   local.set $3
-   local.get $7
-   local.get $3
-   f64.const -0.16666666641626524
-   local.get $6
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $5
-   f64.mul
    local.get $4
-   f64.mul
-   f64.add
-   f32.demote_f64
+   call $~lib/math/sin_kernf
   else
-   local.get $25
-   local.set $7
-   local.get $7
-   local.get $7
-   f64.mul
-   local.set $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.set $4
-   f64.const -0.001388676377460993
-   local.get $3
-   f64.const 2.439044879627741e-05
-   f64.mul
-   f64.add
-   local.set $5
-   f32.const 1
-   f64.promote_f32
-   local.get $3
-   f64.const -0.499999997251031
-   f64.mul
-   f64.add
-   local.get $4
-   f64.const 0.04166662332373906
-   f64.mul
-   f64.add
    local.get $4
-   local.get $3
-   f64.mul
-   local.get $5
-   f64.mul
-   f64.add
-   f32.demote_f64
+   call $~lib/math/cos_kernf
   end
-  local.set $26
-  local.get $24
+  local.set $5
+  local.get $3
   i32.const 1
   i32.add
   i32.const 2
   i32.and
   if (result f32)
-   local.get $26
+   local.get $5
    f32.neg
   else
-   local.get $26
+   local.get $5
   end
  )
  (func $std/math/test_cosf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
@@ -6147,399 +5810,395 @@
   local.get $14
   f64.mul
  )
- (func $~lib/math/NativeMath.exp (param $0 f64) (result f64)
-  (local $1 f64)
-  (local $2 i64)
-  (local $3 i32)
+ (func $~lib/util/math/specialcase (param $0 f64) (param $1 i64) (param $2 i64) (result f64)
+  (local $3 f64)
   (local $4 f64)
   (local $5 f64)
-  (local $6 i64)
+  (local $6 f64)
   (local $7 f64)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 f64)
-  (local $11 i64)
-  (local $12 f64)
-  (local $13 f64)
-  (local $14 i64)
-  (local $15 i64)
-  (local $16 f64)
-  (local $17 f64)
-  (local $18 f64)
-  (local $19 f64)
-  (local $20 f64)
-  (local $21 f64)
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/exp_lut|inlined.0 (result f64)
-   local.get $0
-   local.set $1
+  local.get $2
+  i64.const 2147483648
+  i64.and
+  i64.const 0
+  i64.ne
+  i32.eqz
+  if
    local.get $1
-   i64.reinterpret_f64
-   local.set $2
-   local.get $2
+   i64.const 1009
    i64.const 52
-   i64.shr_u
-   i64.const 2047
-   i64.and
-   i32.wrap_i64
+   i64.shl
+   i64.sub
+   local.set $1
+   local.get $1
+   f64.reinterpret_i64
    local.set $3
+   f64.const 5486124068793688683255936e279
    local.get $3
-   i32.const 969
-   i32.sub
-   i32.const 63
-   i32.ge_u
-   if
-    local.get $3
-    i32.const 969
-    i32.sub
-    i32.const -2147483648
-    i32.ge_u
-    if
-     f64.const 1
-     br $~lib/util/math/exp_lut|inlined.0
-    end
-    local.get $3
-    i32.const 1033
-    i32.ge_u
-    if
-     local.get $2
-     i64.const -4503599627370496
-     i64.eq
-     if
-      f64.const 0
-      br $~lib/util/math/exp_lut|inlined.0
-     end
-     local.get $3
-     i32.const 2047
-     i32.ge_u
-     if
-      f64.const 1
-      local.get $1
-      f64.add
-      br $~lib/util/math/exp_lut|inlined.0
-     end
-     f64.const 0
-     f64.const inf
-     local.get $2
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     select
-     br $~lib/util/math/exp_lut|inlined.0
-    end
-    i32.const 0
-    local.set $3
-   end
-   f64.const 184.6649652337873
-   local.get $1
+   local.get $3
+   local.get $0
    f64.mul
-   local.set $4
-   local.get $4
-   f64.const 6755399441055744
    f64.add
+   f64.mul
+   return
+  end
+  local.get $1
+  i64.const 1022
+  i64.const 52
+  i64.shl
+  i64.add
+  local.set $1
+  local.get $1
+  f64.reinterpret_i64
+  local.set $3
+  local.get $3
+  local.get $3
+  local.get $0
+  f64.mul
+  f64.add
+  local.set $4
+  local.get $4
+  f64.abs
+  f64.const 1
+  f64.lt
+  if
+   f64.const 1
+   local.get $4
+   f64.copysign
    local.set $5
-   local.get $5
-   i64.reinterpret_f64
-   local.set $6
-   local.get $5
-   f64.const 6755399441055744
+   local.get $3
+   local.get $4
    f64.sub
-   local.set $5
-   local.get $1
-   local.get $5
-   f64.const -0.005415212348111709
+   local.get $3
+   local.get $0
    f64.mul
    f64.add
+   local.set $6
    local.get $5
-   f64.const -1.2864023111638346e-14
-   f64.mul
+   local.get $4
    f64.add
    local.set $7
-   local.get $6
-   i64.const 127
-   i64.and
-   i64.const 1
-   i64.shl
-   i32.wrap_i64
-   local.set $8
-   local.get $6
-   i64.const 52
-   i64.const 7
-   i64.sub
-   i64.shl
-   local.set $9
-   i32.const 4632
-   local.get $8
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load
-   f64.reinterpret_i64
-   local.set $10
-   i32.const 4632
-   local.get $8
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load offset=8
-   local.get $9
-   i64.add
-   local.set $11
-   local.get $7
-   local.get $7
-   f64.mul
-   local.set $12
-   local.get $10
-   local.get $7
-   f64.add
-   local.get $12
-   f64.const 0.49999999999996786
+   local.get $5
    local.get $7
-   f64.const 0.16666666666665886
-   f64.mul
+   f64.sub
+   local.get $4
    f64.add
-   f64.mul
+   local.get $6
    f64.add
-   local.get $12
-   local.get $12
-   f64.mul
-   f64.const 0.0416666808410674
+   local.set $6
    local.get $7
-   f64.const 0.008333335853059549
-   f64.mul
-   f64.add
-   f64.mul
+   local.get $6
    f64.add
-   local.set $13
-   local.get $3
-   i32.const 0
-   i32.eq
+   local.get $5
+   f64.sub
+   local.set $4
+   local.get $4
+   f64.const 0
+   f64.eq
    if
-    block $~lib/util/math/specialcase|inlined.0 (result f64)
-     local.get $13
-     local.set $16
-     local.get $11
-     local.set $15
-     local.get $6
-     local.set $14
-     local.get $14
-     i64.const 2147483648
-     i64.and
-     i64.const 0
-     i64.ne
-     i32.eqz
-     if
-      local.get $15
-      i64.const 1009
-      i64.const 52
-      i64.shl
-      i64.sub
-      local.set $15
-      local.get $15
-      f64.reinterpret_i64
-      local.set $17
-      f64.const 5486124068793688683255936e279
-      local.get $17
-      local.get $17
-      local.get $16
-      f64.mul
-      f64.add
-      f64.mul
-      br $~lib/util/math/specialcase|inlined.0
-     end
-     local.get $15
-     i64.const 1022
-     i64.const 52
-     i64.shl
-     i64.add
-     local.set $15
-     local.get $15
-     f64.reinterpret_i64
-     local.set $17
-     local.get $17
-     local.get $17
-     local.get $16
-     f64.mul
-     f64.add
-     local.set $18
-     local.get $18
-     f64.abs
-     f64.const 1
-     f64.lt
-     if
-      f64.const 1
-      local.get $18
-      f64.copysign
-      local.set $19
-      local.get $17
-      local.get $18
-      f64.sub
-      local.get $17
-      local.get $16
-      f64.mul
-      f64.add
-      local.set $20
-      local.get $19
-      local.get $18
-      f64.add
-      local.set $21
-      local.get $19
-      local.get $21
-      f64.sub
-      local.get $18
-      f64.add
-      local.get $20
-      f64.add
-      local.set $20
-      local.get $21
-      local.get $20
-      f64.add
-      local.get $19
-      f64.sub
-      local.set $18
-      local.get $18
-      f64.const 0
-      f64.eq
-      if
-       local.get $15
-       i64.const -9223372036854775808
-       i64.and
-       f64.reinterpret_i64
-       local.set $18
-      end
-     end
-     local.get $18
-     f64.const 2.2250738585072014e-308
-     f64.mul
-    end
-    br $~lib/util/math/exp_lut|inlined.0
+    local.get $1
+    i64.const -9223372036854775808
+    i64.and
+    f64.reinterpret_i64
+    local.set $4
    end
-   local.get $11
-   f64.reinterpret_i64
-   local.set $18
-   local.get $18
-   local.get $18
-   local.get $13
-   f64.mul
-   f64.add
   end
-  return
+  local.get $4
+  f64.const 2.2250738585072014e-308
+  f64.mul
  )
- (func $~lib/math/NativeMath.cosh (param $0 f64) (result f64)
+ (func $~lib/util/math/exp_lut (param $0 f64) (result f64)
   (local $1 i64)
   (local $2 i32)
   (local $3 f64)
   (local $4 f64)
-  (local $5 f64)
+  (local $5 i64)
+  (local $6 f64)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 f64)
+  (local $10 i64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
   local.get $0
   i64.reinterpret_f64
   local.set $1
   local.get $1
-  i64.const 9223372036854775807
-  i64.and
-  local.set $1
-  local.get $1
-  f64.reinterpret_i64
-  local.set $0
-  local.get $1
-  i64.const 32
+  i64.const 52
   i64.shr_u
+  i64.const 2047
+  i64.and
   i32.wrap_i64
   local.set $2
   local.get $2
-  i32.const 1072049730
-  i32.lt_u
+  i32.const 969
+  i32.sub
+  i32.const 63
+  i32.ge_u
   if
    local.get $2
-   i32.const 1072693248
-   i32.const 26
-   i32.const 20
-   i32.shl
+   i32.const 969
    i32.sub
-   i32.lt_u
+   i32.const -2147483648
+   i32.ge_u
    if
     f64.const 1
     return
    end
-   local.get $0
-   call $~lib/math/NativeMath.expm1
-   local.set $3
-   f64.const 1
-   local.get $3
-   local.get $3
-   f64.mul
-   f64.const 2
-   f64.const 2
-   local.get $3
-   f64.mul
-   f64.add
-   f64.div
-   f64.add
-   return
-  end
-  local.get $2
-  i32.const 1082535490
-  i32.lt_u
-  if
-   local.get $0
-   call $~lib/math/NativeMath.exp
-   local.set $3
-   f64.const 0.5
-   local.get $3
-   f64.const 1
-   local.get $3
-   f64.div
-   f64.add
-   f64.mul
-   return
+   local.get $2
+   i32.const 1033
+   i32.ge_u
+   if
+    local.get $1
+    i64.const -4503599627370496
+    i64.eq
+    if
+     f64.const 0
+     return
+    end
+    local.get $2
+    i32.const 2047
+    i32.ge_u
+    if
+     f64.const 1
+     local.get $0
+     f64.add
+     return
+    end
+    f64.const 0
+    f64.const inf
+    local.get $1
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    select
+    return
+   end
+   i32.const 0
+   local.set $2
   end
+  f64.const 184.6649652337873
   local.get $0
+  f64.mul
+  local.set $3
+  local.get $3
+  f64.const 6755399441055744
+  f64.add
   local.set $4
-  i32.const 1023
-  i32.const 2043
-  i32.const 2
-  i32.div_u
-  i32.add
-  i32.const 20
-  i32.shl
-  i64.extend_i32_u
-  i64.const 32
-  i64.shl
-  f64.reinterpret_i64
+  local.get $4
+  i64.reinterpret_f64
   local.set $5
   local.get $4
-  f64.const 1416.0996898839683
+  f64.const 6755399441055744
   f64.sub
-  call $~lib/math/NativeMath.exp
-  local.get $5
+  local.set $4
+  local.get $0
+  local.get $4
+  f64.const -0.005415212348111709
   f64.mul
-  local.get $5
+  f64.add
+  local.get $4
+  f64.const -1.2864023111638346e-14
   f64.mul
-  local.set $3
-  local.get $3
- )
- (func $std/math/test_cosh (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMath.cosh
-  local.get $1
-  local.get $2
-  local.get $3
-  call $std/math/check<f64>
-  if (result i32)
-   global.get $std/math/js
-   i32.eqz
-   if (result i32)
-    i32.const 1
-   else
-    local.get $0
-    call $~lib/bindings/Math/cosh
-    local.get $1
-    local.get $2
-    local.get $3
+  f64.add
+  local.set $6
+  local.get $5
+  i64.const 127
+  i64.and
+  i64.const 1
+  i64.shl
+  i32.wrap_i64
+  local.set $7
+  local.get $5
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shl
+  local.set $8
+  i32.const 4632
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  f64.reinterpret_i64
+  local.set $9
+  i32.const 4632
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load offset=8
+  local.get $8
+  i64.add
+  local.set $10
+  local.get $6
+  local.get $6
+  f64.mul
+  local.set $11
+  local.get $9
+  local.get $6
+  f64.add
+  local.get $11
+  f64.const 0.49999999999996786
+  local.get $6
+  f64.const 0.16666666666665886
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $11
+  local.get $11
+  f64.mul
+  f64.const 0.0416666808410674
+  local.get $6
+  f64.const 0.008333335853059549
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $12
+  local.get $2
+  i32.const 0
+  i32.eq
+  if
+   local.get $12
+   local.get $10
+   local.get $5
+   call $~lib/util/math/specialcase
+   return
+  end
+  local.get $10
+  f64.reinterpret_i64
+  local.set $13
+  local.get $13
+  local.get $13
+  local.get $12
+  f64.mul
+  f64.add
+ )
+ (func $~lib/math/NativeMath.exp (param $0 f64) (result f64)
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  call $~lib/util/math/exp_lut
+  return
+ )
+ (func $~lib/math/expo2 (param $0 f64) (result f64)
+  (local $1 f64)
+  i32.const 1023
+  i32.const 2043
+  i32.const 2
+  i32.div_u
+  i32.add
+  i32.const 20
+  i32.shl
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  f64.reinterpret_i64
+  local.set $1
+  local.get $0
+  f64.const 1416.0996898839683
+  f64.sub
+  call $~lib/math/NativeMath.exp
+  local.get $1
+  f64.mul
+  local.get $1
+  f64.mul
+ )
+ (func $~lib/math/NativeMath.cosh (param $0 f64) (result f64)
+  (local $1 i64)
+  (local $2 i32)
+  (local $3 f64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $1
+  local.get $1
+  i64.const 9223372036854775807
+  i64.and
+  local.set $1
+  local.get $1
+  f64.reinterpret_i64
+  local.set $0
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  i32.wrap_i64
+  local.set $2
+  local.get $2
+  i32.const 1072049730
+  i32.lt_u
+  if
+   local.get $2
+   i32.const 1072693248
+   i32.const 26
+   i32.const 20
+   i32.shl
+   i32.sub
+   i32.lt_u
+   if
+    f64.const 1
+    return
+   end
+   local.get $0
+   call $~lib/math/NativeMath.expm1
+   local.set $3
+   f64.const 1
+   local.get $3
+   local.get $3
+   f64.mul
+   f64.const 2
+   f64.const 2
+   local.get $3
+   f64.mul
+   f64.add
+   f64.div
+   f64.add
+   return
+  end
+  local.get $2
+  i32.const 1082535490
+  i32.lt_u
+  if
+   local.get $0
+   call $~lib/math/NativeMath.exp
+   local.set $3
+   f64.const 0.5
+   local.get $3
+   f64.const 1
+   local.get $3
+   f64.div
+   f64.add
+   f64.mul
+   return
+  end
+  local.get $0
+  call $~lib/math/expo2
+  local.set $3
+  local.get $3
+ )
+ (func $std/math/test_cosh (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.cosh
+  local.get $1
+  local.get $2
+  local.get $3
+  call $std/math/check<f64>
+  if (result i32)
+   global.get $std/math/js
+   i32.eqz
+   if (result i32)
+    i32.const 1
+   else
+    local.get $0
+    call $~lib/bindings/Math/cosh
+    local.get $1
+    local.get $2
+    local.get $3
     call $std/math/check<f64>
    end
   else
@@ -6839,147 +6498,165 @@
   local.get $13
   f32.mul
  )
- (func $~lib/math/NativeMathf.exp (param $0 f32) (result f32)
-  (local $1 f32)
-  (local $2 f64)
+ (func $~lib/util/math/expf_lut (param $0 f32) (result f32)
+  (local $1 f64)
+  (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
+  (local $4 f64)
   (local $5 f64)
-  (local $6 f64)
-  (local $7 i64)
+  (local $6 i64)
+  (local $7 f64)
   (local $8 f64)
   (local $9 f64)
-  (local $10 f64)
-  (local $11 i64)
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/expf_lut|inlined.0 (result f32)
-   local.get $0
-   local.set $1
-   local.get $1
-   f64.promote_f32
-   local.set $2
-   local.get $1
-   i32.reinterpret_f32
-   local.set $3
+  (local $10 i64)
+  local.get $0
+  f64.promote_f32
+  local.set $1
+  local.get $0
+  i32.reinterpret_f32
+  local.set $2
+  local.get $2
+  i32.const 20
+  i32.shr_u
+  i32.const 2047
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 1067
+  i32.ge_u
+  if
+   local.get $2
+   i32.const -8388608
+   i32.eq
+   if
+    f32.const 0
+    return
+   end
    local.get $3
-   i32.const 20
-   i32.shr_u
-   i32.const 2047
-   i32.and
-   local.set $4
-   local.get $4
-   i32.const 1067
+   i32.const 2040
    i32.ge_u
    if
-    local.get $3
-    i32.const -8388608
-    i32.eq
-    if
-     f32.const 0
-     br $~lib/util/math/expf_lut|inlined.0
-    end
-    local.get $4
-    i32.const 2040
-    i32.ge_u
-    if
-     local.get $1
-     local.get $1
-     f32.add
-     br $~lib/util/math/expf_lut|inlined.0
-    end
-    local.get $1
-    i32.const 1118925335
-    f32.reinterpret_i32
-    f32.gt
-    if
-     local.get $1
-     f32.const 1701411834604692317316873e14
-     f32.mul
-     br $~lib/util/math/expf_lut|inlined.0
-    end
-    local.get $1
-    i32.const -1026559564
-    f32.reinterpret_i32
-    f32.lt
-    if
-     f32.const 0
-     br $~lib/util/math/expf_lut|inlined.0
-    end
+    local.get $0
+    local.get $0
+    f32.add
+    return
+   end
+   local.get $0
+   i32.const 1118925335
+   f32.reinterpret_i32
+   f32.gt
+   if
+    local.get $0
+    f32.const 1701411834604692317316873e14
+    f32.mul
+    return
+   end
+   local.get $0
+   i32.const -1026559564
+   f32.reinterpret_i32
+   f32.lt
+   if
+    f32.const 0
+    return
    end
-   f64.const 46.16624130844683
-   local.get $2
-   f64.mul
-   local.set $5
-   local.get $5
-   f64.const 6755399441055744
-   f64.add
-   local.set $6
-   local.get $6
-   i64.reinterpret_f64
-   local.set $7
-   local.get $5
-   local.get $6
-   f64.const 6755399441055744
-   f64.sub
-   f64.sub
-   local.set $8
-   i32.const 6680
-   local.get $7
-   i32.wrap_i64
-   i32.const 31
-   i32.and
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load
-   local.set $11
-   local.get $11
-   local.get $7
-   i64.const 52
-   i64.const 5
-   i64.sub
-   i64.shl
-   i64.add
-   local.set $11
-   local.get $11
-   f64.reinterpret_i64
-   local.set $9
-   f64.const 1.6938359250920212e-06
-   local.get $8
-   f64.mul
-   f64.const 2.3459809789509004e-04
-   f64.add
-   local.set $5
-   f64.const 0.021660849396613134
-   local.get $8
-   f64.mul
-   f64.const 1
-   f64.add
-   local.set $10
-   local.get $10
-   local.get $5
-   local.get $8
-   local.get $8
-   f64.mul
-   f64.mul
-   f64.add
-   local.set $10
-   local.get $10
-   local.get $9
-   f64.mul
-   local.set $10
-   local.get $10
-   f32.demote_f64
   end
+  f64.const 46.16624130844683
+  local.get $1
+  f64.mul
+  local.set $4
+  local.get $4
+  f64.const 6755399441055744
+  f64.add
+  local.set $5
+  local.get $5
+  i64.reinterpret_f64
+  local.set $6
+  local.get $4
+  local.get $5
+  f64.const 6755399441055744
+  f64.sub
+  f64.sub
+  local.set $7
+  i32.const 6680
+  local.get $6
+  i32.wrap_i64
+  i32.const 31
+  i32.and
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  local.set $10
+  local.get $10
+  local.get $6
+  i64.const 52
+  i64.const 5
+  i64.sub
+  i64.shl
+  i64.add
+  local.set $10
+  local.get $10
+  f64.reinterpret_i64
+  local.set $8
+  f64.const 1.6938359250920212e-06
+  local.get $7
+  f64.mul
+  f64.const 2.3459809789509004e-04
+  f64.add
+  local.set $4
+  f64.const 0.021660849396613134
+  local.get $7
+  f64.mul
+  f64.const 1
+  f64.add
+  local.set $9
+  local.get $9
+  local.get $4
+  local.get $7
+  local.get $7
+  f64.mul
+  f64.mul
+  f64.add
+  local.set $9
+  local.get $9
+  local.get $8
+  f64.mul
+  local.set $9
+  local.get $9
+  f32.demote_f64
+ )
+ (func $~lib/math/NativeMathf.exp (param $0 f32) (result f32)
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  call $~lib/util/math/expf_lut
   return
  )
+ (func $~lib/math/expo2f (param $0 f32) (result f32)
+  (local $1 f32)
+  i32.const 127
+  i32.const 235
+  i32.const 1
+  i32.shr_u
+  i32.add
+  i32.const 23
+  i32.shl
+  f32.reinterpret_i32
+  local.set $1
+  local.get $0
+  f32.const 162.88958740234375
+  f32.sub
+  call $~lib/math/NativeMathf.exp
+  local.get $1
+  f32.mul
+  local.get $1
+  f32.mul
+ )
  (func $~lib/math/NativeMathf.cosh (param $0 f32) (result f32)
   (local $1 i32)
   (local $2 f32)
-  (local $3 f32)
   local.get $0
   i32.reinterpret_f32
   local.set $1
@@ -7038,24 +6715,7 @@
    return
   end
   local.get $0
-  local.set $2
-  i32.const 127
-  i32.const 235
-  i32.const 1
-  i32.shr_u
-  i32.add
-  i32.const 23
-  i32.shl
-  f32.reinterpret_i32
-  local.set $3
-  local.get $2
-  f32.const 162.88958740234375
-  f32.sub
-  call $~lib/math/NativeMathf.exp
-  local.get $3
-  f32.mul
-  local.get $3
-  f32.mul
+  call $~lib/math/expo2f
  )
  (func $std/math/test_coshf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
   local.get $0
@@ -7129,272 +6789,267 @@
   local.get $3
   call $std/math/check<f32>
  )
- (func $~lib/math/NativeMath.exp2 (param $0 f64) (result f64)
-  (local $1 f64)
-  (local $2 i64)
-  (local $3 i32)
+ (func $~lib/util/math/specialcase2 (param $0 f64) (param $1 i64) (param $2 i64) (result f64)
+  (local $3 f64)
   (local $4 f64)
-  (local $5 i64)
+  (local $5 f64)
   (local $6 f64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 f64)
-  (local $10 i64)
-  (local $11 f64)
-  (local $12 f64)
-  (local $13 i64)
-  (local $14 i64)
-  (local $15 f64)
-  (local $16 f64)
-  (local $17 f64)
-  (local $18 f64)
-  (local $19 f64)
-  block $~lib/util/math/exp2_lut|inlined.0 (result f64)
-   local.get $0
-   local.set $1
+  local.get $2
+  i64.const 2147483648
+  i64.and
+  i64.const 0
+  i64.eq
+  if
    local.get $1
-   i64.reinterpret_f64
-   local.set $2
-   local.get $2
+   i64.const 1
    i64.const 52
-   i64.shr_u
-   i64.const 2047
-   i64.and
-   i32.wrap_i64
+   i64.shl
+   i64.sub
+   local.set $1
+   local.get $1
+   f64.reinterpret_i64
    local.set $3
+   f64.const 2
+   local.get $3
+   local.get $0
+   f64.mul
    local.get $3
-   i32.const 969
-   i32.sub
-   i32.const 63
-   i32.ge_u
-   if
-    local.get $3
-    i32.const 969
-    i32.sub
-    i32.const -2147483648
-    i32.ge_u
-    if
-     f64.const 1
-     br $~lib/util/math/exp2_lut|inlined.0
-    end
-    local.get $3
-    i32.const 1033
-    i32.ge_u
-    if
-     local.get $2
-     i64.const -4503599627370496
-     i64.eq
-     if
-      f64.const 0
-      br $~lib/util/math/exp2_lut|inlined.0
-     end
-     local.get $3
-     i32.const 2047
-     i32.ge_u
-     if
-      f64.const 1
-      local.get $1
-      f64.add
-      br $~lib/util/math/exp2_lut|inlined.0
-     end
-     local.get $2
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     i32.eqz
-     if
-      f64.const inf
-      br $~lib/util/math/exp2_lut|inlined.0
-     else
-      local.get $2
-      i64.const -4570929321408987136
-      i64.ge_u
-      if
-       f64.const 0
-       br $~lib/util/math/exp2_lut|inlined.0
-      end
-     end
-    end
-    local.get $2
-    i64.const 1
-    i64.shl
-    i64.const -9143996093422370816
-    i64.gt_u
-    if
-     i32.const 0
-     local.set $3
-    end
-   end
-   local.get $1
-   f64.const 52776558133248
    f64.add
-   local.set $4
-   local.get $4
-   i64.reinterpret_f64
-   local.set $5
-   local.get $4
-   f64.const 52776558133248
-   f64.sub
-   local.set $4
-   local.get $1
+   f64.mul
+   return
+  end
+  local.get $1
+  i64.const 1022
+  i64.const 52
+  i64.shl
+  i64.add
+  local.set $1
+  local.get $1
+  f64.reinterpret_i64
+  local.set $3
+  local.get $3
+  local.get $0
+  f64.mul
+  local.get $3
+  f64.add
+  local.set $4
+  local.get $4
+  f64.const 1
+  f64.lt
+  if
+   local.get $3
    local.get $4
    f64.sub
-   local.set $6
-   local.get $5
-   i64.const 127
-   i64.and
-   i64.const 1
-   i64.shl
-   i32.wrap_i64
-   local.set $7
-   local.get $5
-   i64.const 52
-   i64.const 7
-   i64.sub
-   i64.shl
-   local.set $8
-   i32.const 4632
-   local.get $7
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load
-   f64.reinterpret_i64
-   local.set $9
-   i32.const 4632
-   local.get $7
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load offset=8
-   local.get $8
-   i64.add
-   local.set $10
-   local.get $6
-   local.get $6
-   f64.mul
-   local.set $11
-   local.get $9
-   local.get $6
-   f64.const 0.6931471805599453
+   local.get $3
+   local.get $0
    f64.mul
    f64.add
-   local.get $11
-   f64.const 0.24022650695909065
-   local.get $6
-   f64.const 0.0555041086686087
-   f64.mul
+   local.set $6
+   f64.const 1
+   local.get $4
    f64.add
-   f64.mul
+   local.set $5
+   f64.const 1
+   local.get $5
+   f64.sub
+   local.get $4
    f64.add
-   local.get $11
-   local.get $11
-   f64.mul
-   f64.const 0.009618131975721055
    local.get $6
-   f64.const 1.3332074570119598e-03
-   f64.mul
    f64.add
-   f64.mul
+   local.set $6
+   local.get $5
+   local.get $6
    f64.add
-   local.set $12
-   local.get $3
-   i32.const 0
-   i32.eq
+   f64.const 1
+   f64.sub
+   local.set $4
+  end
+  local.get $4
+  f64.const 2.2250738585072014e-308
+  f64.mul
+ )
+ (func $~lib/util/math/exp2_lut (param $0 f64) (result f64)
+  (local $1 i64)
+  (local $2 i32)
+  (local $3 f64)
+  (local $4 i64)
+  (local $5 f64)
+  (local $6 i32)
+  (local $7 i64)
+  (local $8 f64)
+  (local $9 i64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $1
+  local.get $1
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  i32.wrap_i64
+  local.set $2
+  local.get $2
+  i32.const 969
+  i32.sub
+  i32.const 63
+  i32.ge_u
+  if
+   local.get $2
+   i32.const 969
+   i32.sub
+   i32.const -2147483648
+   i32.ge_u
    if
-    block $~lib/util/math/specialcase2|inlined.0 (result f64)
-     local.get $12
-     local.set $15
-     local.get $10
-     local.set $14
-     local.get $5
-     local.set $13
-     local.get $13
-     i64.const 2147483648
-     i64.and
-     i64.const 0
-     i64.eq
-     if
-      local.get $14
-      i64.const 1
-      i64.const 52
-      i64.shl
-      i64.sub
-      local.set $14
-      local.get $14
-      f64.reinterpret_i64
-      local.set $16
-      f64.const 2
-      local.get $16
-      local.get $15
-      f64.mul
-      local.get $16
-      f64.add
-      f64.mul
-      br $~lib/util/math/specialcase2|inlined.0
-     end
-     local.get $14
-     i64.const 1022
-     i64.const 52
-     i64.shl
-     i64.add
-     local.set $14
-     local.get $14
-     f64.reinterpret_i64
-     local.set $16
-     local.get $16
-     local.get $15
-     f64.mul
-     local.get $16
-     f64.add
-     local.set $17
-     local.get $17
+    f64.const 1
+    return
+   end
+   local.get $2
+   i32.const 1033
+   i32.ge_u
+   if
+    local.get $1
+    i64.const -4503599627370496
+    i64.eq
+    if
+     f64.const 0
+     return
+    end
+    local.get $2
+    i32.const 2047
+    i32.ge_u
+    if
      f64.const 1
-     f64.lt
+     local.get $0
+     f64.add
+     return
+    end
+    local.get $1
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    i32.eqz
+    if
+     f64.const inf
+     return
+    else
+     local.get $1
+     i64.const -4570929321408987136
+     i64.ge_u
      if
-      local.get $16
-      local.get $17
-      f64.sub
-      local.get $16
-      local.get $15
-      f64.mul
-      f64.add
-      local.set $19
-      f64.const 1
-      local.get $17
-      f64.add
-      local.set $18
-      f64.const 1
-      local.get $18
-      f64.sub
-      local.get $17
-      f64.add
-      local.get $19
-      f64.add
-      local.set $19
-      local.get $18
-      local.get $19
-      f64.add
-      f64.const 1
-      f64.sub
-      local.set $17
+      f64.const 0
+      return
      end
-     local.get $17
-     f64.const 2.2250738585072014e-308
-     f64.mul
     end
-    br $~lib/util/math/exp2_lut|inlined.0
    end
-   local.get $10
-   f64.reinterpret_i64
-   local.set $17
-   local.get $17
-   local.get $12
-   f64.mul
-   local.get $17
-   f64.add
+   local.get $1
+   i64.const 1
+   i64.shl
+   i64.const -9143996093422370816
+   i64.gt_u
+   if
+    i32.const 0
+    local.set $2
+   end
+  end
+  local.get $0
+  f64.const 52776558133248
+  f64.add
+  local.set $3
+  local.get $3
+  i64.reinterpret_f64
+  local.set $4
+  local.get $3
+  f64.const 52776558133248
+  f64.sub
+  local.set $3
+  local.get $0
+  local.get $3
+  f64.sub
+  local.set $5
+  local.get $4
+  i64.const 127
+  i64.and
+  i64.const 1
+  i64.shl
+  i32.wrap_i64
+  local.set $6
+  local.get $4
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shl
+  local.set $7
+  i32.const 4632
+  local.get $6
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  f64.reinterpret_i64
+  local.set $8
+  i32.const 4632
+  local.get $6
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load offset=8
+  local.get $7
+  i64.add
+  local.set $9
+  local.get $5
+  local.get $5
+  f64.mul
+  local.set $10
+  local.get $8
+  local.get $5
+  f64.const 0.6931471805599453
+  f64.mul
+  f64.add
+  local.get $10
+  f64.const 0.24022650695909065
+  local.get $5
+  f64.const 0.0555041086686087
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $10
+  local.get $10
+  f64.mul
+  f64.const 0.009618131975721055
+  local.get $5
+  f64.const 1.3332074570119598e-03
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $11
+  local.get $2
+  i32.const 0
+  i32.eq
+  if
+   local.get $11
+   local.get $9
+   local.get $4
+   call $~lib/util/math/specialcase2
+   return
   end
+  local.get $9
+  f64.reinterpret_i64
+  local.set $12
+  local.get $12
+  local.get $11
+  f64.mul
+  local.get $12
+  f64.add
+ )
+ (func $~lib/math/NativeMath.exp2 (param $0 f64) (result f64)
+  local.get $0
+  call $~lib/util/math/exp2_lut
  )
  (func $std/math/test_exp2 (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
   local.get $0
@@ -7421,128 +7076,127 @@
    i32.const 0
   end
  )
- (func $~lib/math/NativeMathf.exp2 (param $0 f32) (result f32)
-  (local $1 f32)
-  (local $2 f64)
+ (func $~lib/util/math/exp2f_lut (param $0 f32) (result f32)
+  (local $1 f64)
+  (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 f64)
-  (local $8 i64)
+  (local $4 f64)
+  (local $5 i64)
+  (local $6 f64)
+  (local $7 i64)
+  (local $8 f64)
   (local $9 f64)
-  (local $10 f64)
-  block $~lib/util/math/exp2f_lut|inlined.0 (result f32)
-   local.get $0
-   local.set $1
-   local.get $1
-   f64.promote_f32
-   local.set $2
-   local.get $1
-   i32.reinterpret_f32
-   local.set $3
+  local.get $0
+  f64.promote_f32
+  local.set $1
+  local.get $0
+  i32.reinterpret_f32
+  local.set $2
+  local.get $2
+  i32.const 20
+  i32.shr_u
+  i32.const 2047
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 1072
+  i32.ge_u
+  if
+   local.get $2
+   i32.const -8388608
+   i32.eq
+   if
+    f32.const 0
+    return
+   end
    local.get $3
-   i32.const 20
-   i32.shr_u
-   i32.const 2047
-   i32.and
-   local.set $4
-   local.get $4
-   i32.const 1072
+   i32.const 2040
    i32.ge_u
    if
-    local.get $3
-    i32.const -8388608
-    i32.eq
-    if
-     f32.const 0
-     br $~lib/util/math/exp2f_lut|inlined.0
-    end
-    local.get $4
-    i32.const 2040
-    i32.ge_u
-    if
-     local.get $1
-     local.get $1
-     f32.add
-     br $~lib/util/math/exp2f_lut|inlined.0
-    end
-    local.get $1
+    local.get $0
+    local.get $0
+    f32.add
+    return
+   end
+   local.get $0
+   f32.const 0
+   f32.gt
+   if
+    local.get $0
+    f32.const 1701411834604692317316873e14
+    f32.mul
+    return
+   end
+   local.get $0
+   f32.const -150
+   f32.le
+   if
     f32.const 0
-    f32.gt
-    if
-     local.get $1
-     f32.const 1701411834604692317316873e14
-     f32.mul
-     br $~lib/util/math/exp2f_lut|inlined.0
-    end
-    local.get $1
-    f32.const -150
-    f32.le
-    if
-     f32.const 0
-     br $~lib/util/math/exp2f_lut|inlined.0
-    end
+    return
    end
-   local.get $2
-   f64.const 211106232532992
-   f64.add
-   local.set $5
-   local.get $5
-   i64.reinterpret_f64
-   local.set $6
-   local.get $2
-   local.get $5
-   f64.const 211106232532992
-   f64.sub
-   f64.sub
-   local.set $7
-   i32.const 6680
-   local.get $6
-   i32.wrap_i64
-   i32.const 31
-   i32.and
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load
-   local.set $8
-   local.get $8
-   local.get $6
-   i64.const 52
-   i64.const 5
-   i64.sub
-   i64.shl
-   i64.add
-   local.set $8
-   local.get $8
-   f64.reinterpret_i64
-   local.set $10
-   f64.const 0.6931471806916203
-   local.get $7
-   f64.mul
-   f64.const 1
-   f64.add
-   local.set $9
-   local.get $9
-   f64.const 0.05550361559341535
-   local.get $7
-   f64.mul
-   f64.const 0.2402284522445722
-   f64.add
-   local.get $7
-   local.get $7
-   f64.mul
-   f64.mul
-   f64.add
-   local.set $9
-   local.get $9
-   local.get $10
-   f64.mul
-   local.set $9
-   local.get $9
-   f32.demote_f64
   end
+  local.get $1
+  f64.const 211106232532992
+  f64.add
+  local.set $4
+  local.get $4
+  i64.reinterpret_f64
+  local.set $5
+  local.get $1
+  local.get $4
+  f64.const 211106232532992
+  f64.sub
+  f64.sub
+  local.set $6
+  i32.const 6680
+  local.get $5
+  i32.wrap_i64
+  i32.const 31
+  i32.and
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  local.set $7
+  local.get $7
+  local.get $5
+  i64.const 52
+  i64.const 5
+  i64.sub
+  i64.shl
+  i64.add
+  local.set $7
+  local.get $7
+  f64.reinterpret_i64
+  local.set $9
+  f64.const 0.6931471806916203
+  local.get $6
+  f64.mul
+  f64.const 1
+  f64.add
+  local.set $8
+  local.get $8
+  f64.const 0.05550361559341535
+  local.get $6
+  f64.mul
+  f64.const 0.2402284522445722
+  f64.add
+  local.get $6
+  local.get $6
+  f64.mul
+  f64.mul
+  f64.add
+  local.set $8
+  local.get $8
+  local.get $9
+  f64.mul
+  local.set $8
+  local.get $8
+  f32.demote_f64
+ )
+ (func $~lib/math/NativeMathf.exp2 (param $0 f32) (result f32)
+  local.get $0
+  call $~lib/util/math/exp2f_lut
  )
  (func $std/math/test_exp2f (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
   local.get $0
@@ -7552,12 +7206,13 @@
   local.get $3
   call $std/math/check<f32>
  )
- (func $std/math/test_floor (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  (local $4 f64)
+ (func $~lib/math/NativeMath.floor (param $0 f64) (result f64)
   local.get $0
-  local.set $4
-  local.get $4
   f64.floor
+ )
+ (func $std/math/test_floor (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.floor
   local.get $1
   local.get $2
   local.get $3
@@ -7579,12 +7234,13 @@
    i32.const 0
   end
  )
- (func $std/math/test_floorf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
-  (local $4 f32)
+ (func $~lib/math/NativeMathf.floor (param $0 f32) (result f32)
   local.get $0
-  local.set $4
-  local.get $4
   f32.floor
+ )
+ (func $std/math/test_floorf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMathf.floor
   local.get $1
   local.get $2
   local.get $3
@@ -8494,9 +8150,9 @@
   local.get $3
   call $std/math/check<f32>
  )
- (func $~lib/math/NativeMath.log2 (param $0 f64) (result f64)
-  (local $1 f64)
-  (local $2 i64)
+ (func $~lib/util/math/log2_lut (param $0 f64) (result f64)
+  (local $1 i64)
+  (local $2 f64)
   (local $3 f64)
   (local $4 f64)
   (local $5 f64)
@@ -8505,12 +8161,12 @@
   (local $8 f64)
   (local $9 f64)
   (local $10 f64)
-  (local $11 f64)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i32)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
   (local $15 i64)
-  (local $16 i64)
+  (local $16 f64)
   (local $17 f64)
   (local $18 f64)
   (local $19 f64)
@@ -8518,331 +8174,339 @@
   (local $21 f64)
   (local $22 f64)
   (local $23 f64)
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/log2_lut|inlined.0 (result f64)
+  (local $24 f64)
+  (local $25 f64)
+  (local $26 f64)
+  (local $27 f64)
+  (local $28 f64)
+  (local $29 f64)
+  (local $30 f64)
+  (local $31 f64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $1
+  local.get $1
+  i64.const 4606800540372828160
+  i64.sub
+  i64.const 4607381812656734208
+  i64.const 4606800540372828160
+  i64.sub
+  i64.lt_u
+  if
    local.get $0
-   local.set $1
-   local.get $1
-   i64.reinterpret_f64
+   f64.const 1
+   f64.sub
    local.set $2
    local.get $2
-   i64.const 4606800540372828160
-   i64.sub
-   i64.const 4607381812656734208
-   i64.const 4606800540372828160
-   i64.sub
-   i64.lt_u
-   if
-    local.get $1
-    f64.const 1
-    f64.sub
-    local.set $3
-    local.get $3
-    i64.reinterpret_f64
-    i64.const -4294967296
-    i64.and
-    f64.reinterpret_i64
-    local.set $4
-    local.get $3
-    local.get $4
-    f64.sub
-    local.set $5
-    local.get $4
-    f64.const 1.4426950407214463
-    f64.mul
-    local.set $6
-    local.get $5
-    f64.const 1.4426950407214463
-    f64.mul
-    local.get $3
-    f64.const 1.6751713164886512e-10
-    f64.mul
-    f64.add
-    local.set $7
-    local.get $3
-    local.get $3
-    f64.mul
-    local.set $8
-    local.get $8
-    local.get $8
-    f64.mul
-    local.set $9
-    local.get $8
-    f64.const -0.7213475204444817
-    local.get $3
-    f64.const 0.48089834696298744
-    f64.mul
-    f64.add
-    f64.mul
-    local.set $10
-    local.get $6
-    local.get $10
-    f64.add
-    local.set $11
-    local.get $7
-    local.get $6
-    local.get $11
-    f64.sub
-    local.get $10
-    f64.add
-    f64.add
-    local.set $7
-    local.get $7
-    local.get $9
-    f64.const -0.360673760222145
-    local.get $3
-    f64.const 0.2885390081805197
-    f64.mul
-    f64.add
-    local.get $8
-    f64.const -0.24044917405728863
-    local.get $3
-    f64.const 0.2060992861022954
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $9
-    f64.const -0.18033596705327856
-    local.get $3
-    f64.const 0.1603032746063156
-    f64.mul
-    f64.add
-    local.get $8
-    f64.const -0.14483316576701266
-    local.get $3
-    f64.const 0.13046826811283835
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $7
-    local.get $11
-    local.get $7
-    f64.add
-    br $~lib/util/math/log2_lut|inlined.0
-   end
-   local.get $2
-   i64.const 48
-   i64.shr_u
-   i32.wrap_i64
-   local.set $12
-   local.get $12
-   i32.const 16
-   i32.sub
-   i32.const 32752
-   i32.const 16
-   i32.sub
-   i32.ge_u
-   if
-    local.get $2
-    i64.const 1
-    i64.shl
-    i64.const 0
-    i64.eq
-    if
-     f64.const -1
-     local.get $1
-     local.get $1
-     f64.mul
-     f64.div
-     br $~lib/util/math/log2_lut|inlined.0
-    end
-    local.get $2
-    i64.const 9218868437227405312
-    i64.eq
-    if
-     local.get $1
-     br $~lib/util/math/log2_lut|inlined.0
-    end
-    local.get $12
-    i32.const 32768
-    i32.and
-    if (result i32)
-     i32.const 1
-    else
-     local.get $12
-     i32.const 32752
-     i32.and
-     i32.const 32752
-     i32.eq
-    end
-    if
-     local.get $1
-     local.get $1
-     f64.sub
-     local.get $1
-     local.get $1
-     f64.sub
-     f64.div
-     br $~lib/util/math/log2_lut|inlined.0
-    end
-    local.get $1
-    f64.const 4503599627370496
-    f64.mul
-    i64.reinterpret_f64
-    local.set $2
-    local.get $2
-    i64.const 52
-    i64.const 52
-    i64.shl
-    i64.sub
-    local.set $2
-   end
-   local.get $2
-   i64.const 4604367669032910848
-   i64.sub
-   local.set $13
-   local.get $13
-   i64.const 52
-   i64.const 6
-   i64.sub
-   i64.shr_u
-   i64.const 63
-   i64.and
-   i32.wrap_i64
-   local.set $14
-   local.get $13
-   i64.const 52
-   i64.shr_s
-   local.set $15
-   local.get $2
-   local.get $13
-   i64.const -4503599627370496
-   i64.and
-   i64.sub
-   local.set $16
-   i32.const 6936
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $11
-   i32.const 6936
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $10
-   local.get $16
-   f64.reinterpret_i64
-   local.set $9
-   local.get $15
-   f64.convert_i64_s
-   local.set $8
-   i32.const 7960
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $7
-   i32.const 7960
-   local.get $14
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $6
-   local.get $9
-   local.get $7
-   f64.sub
-   local.get $6
-   f64.sub
-   local.get $11
-   f64.mul
-   local.set $5
-   local.get $5
    i64.reinterpret_f64
    i64.const -4294967296
    i64.and
    f64.reinterpret_i64
-   local.set $4
-   local.get $5
-   local.get $4
-   f64.sub
    local.set $3
-   local.get $4
+   local.get $2
+   local.get $3
+   f64.sub
+   local.set $4
+   local.get $3
    f64.const 1.4426950407214463
    f64.mul
-   local.set $17
-   local.get $3
+   local.set $5
+   local.get $4
    f64.const 1.4426950407214463
    f64.mul
-   local.get $5
+   local.get $2
    f64.const 1.6751713164886512e-10
    f64.mul
    f64.add
-   local.set $18
-   local.get $8
-   local.get $10
+   local.set $6
+   local.get $2
+   local.get $2
+   f64.mul
+   local.set $7
+   local.get $7
+   local.get $7
+   f64.mul
+   local.set $8
+   local.get $7
+   f64.const -0.7213475204444817
+   local.get $2
+   f64.const 0.48089834696298744
+   f64.mul
    f64.add
-   local.set $19
-   local.get $19
-   local.get $17
+   f64.mul
+   local.set $9
+   local.get $5
+   local.get $9
    f64.add
-   local.set $20
-   local.get $19
-   local.get $20
+   local.set $10
+   local.get $6
+   local.get $5
+   local.get $10
    f64.sub
-   local.get $17
+   local.get $9
    f64.add
-   local.get $18
    f64.add
-   local.set $21
-   local.get $5
-   local.get $5
+   local.set $6
+   local.get $6
+   local.get $8
+   f64.const -0.360673760222145
+   local.get $2
+   f64.const 0.2885390081805197
    f64.mul
-   local.set $22
-   f64.const -0.7213475204444882
-   local.get $5
-   f64.const 0.4808983469629985
+   f64.add
+   local.get $7
+   f64.const -0.24044917405728863
+   local.get $2
+   f64.const 0.2060992861022954
    f64.mul
    f64.add
-   local.get $22
-   f64.const -0.36067375954075914
-   local.get $5
-   f64.const 0.2885390073180969
    f64.mul
    f64.add
+   local.get $8
+   f64.const -0.18033596705327856
+   local.get $2
+   f64.const 0.1603032746063156
    f64.mul
    f64.add
-   local.get $22
-   local.get $22
+   local.get $7
+   f64.const -0.14483316576701266
+   local.get $2
+   f64.const 0.13046826811283835
    f64.mul
-   f64.const -0.2404693555628422
-   local.get $5
-   f64.const 0.2061202382173603
+   f64.add
    f64.mul
    f64.add
    f64.mul
    f64.add
-   local.set $23
-   local.get $21
-   local.get $22
-   local.get $23
    f64.mul
    f64.add
-   local.get $20
+   local.set $6
+   local.get $10
+   local.get $6
    f64.add
+   return
+  end
+  local.get $1
+  i64.const 48
+  i64.shr_u
+  i32.wrap_i64
+  local.set $11
+  local.get $11
+  i32.const 16
+  i32.sub
+  i32.const 32752
+  i32.const 16
+  i32.sub
+  i32.ge_u
+  if
+   local.get $1
+   i64.const 1
+   i64.shl
+   i64.const 0
+   i64.eq
+   if
+    f64.const -1
+    local.get $0
+    local.get $0
+    f64.mul
+    f64.div
+    return
+   end
+   local.get $1
+   i64.const 9218868437227405312
+   i64.eq
+   if
+    local.get $0
+    return
+   end
+   local.get $11
+   i32.const 32768
+   i32.and
+   if (result i32)
+    i32.const 1
+   else
+    local.get $11
+    i32.const 32752
+    i32.and
+    i32.const 32752
+    i32.eq
+   end
+   if
+    local.get $0
+    local.get $0
+    f64.sub
+    local.get $0
+    local.get $0
+    f64.sub
+    f64.div
+    return
+   end
+   local.get $0
+   f64.const 4503599627370496
+   f64.mul
+   i64.reinterpret_f64
+   local.set $1
+   local.get $1
+   i64.const 52
+   i64.const 52
+   i64.shl
+   i64.sub
+   local.set $1
   end
+  local.get $1
+  i64.const 4604367669032910848
+  i64.sub
+  local.set $12
+  local.get $12
+  i64.const 52
+  i64.const 6
+  i64.sub
+  i64.shr_u
+  i64.const 63
+  i64.and
+  i32.wrap_i64
+  local.set $13
+  local.get $12
+  i64.const 52
+  i64.shr_s
+  local.set $14
+  local.get $1
+  local.get $12
+  i64.const -4503599627370496
+  i64.and
+  i64.sub
+  local.set $15
+  i32.const 6936
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $16
+  i32.const 6936
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $17
+  local.get $15
+  f64.reinterpret_i64
+  local.set $18
+  local.get $14
+  f64.convert_i64_s
+  local.set $19
+  i32.const 7960
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $20
+  i32.const 7960
+  local.get $13
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $21
+  local.get $18
+  local.get $20
+  f64.sub
+  local.get $21
+  f64.sub
+  local.get $16
+  f64.mul
+  local.set $22
+  local.get $22
+  i64.reinterpret_f64
+  i64.const -4294967296
+  i64.and
+  f64.reinterpret_i64
+  local.set $23
+  local.get $22
+  local.get $23
+  f64.sub
+  local.set $24
+  local.get $23
+  f64.const 1.4426950407214463
+  f64.mul
+  local.set $25
+  local.get $24
+  f64.const 1.4426950407214463
+  f64.mul
+  local.get $22
+  f64.const 1.6751713164886512e-10
+  f64.mul
+  f64.add
+  local.set $26
+  local.get $19
+  local.get $17
+  f64.add
+  local.set $27
+  local.get $27
+  local.get $25
+  f64.add
+  local.set $28
+  local.get $27
+  local.get $28
+  f64.sub
+  local.get $25
+  f64.add
+  local.get $26
+  f64.add
+  local.set $29
+  local.get $22
+  local.get $22
+  f64.mul
+  local.set $30
+  f64.const -0.7213475204444882
+  local.get $22
+  f64.const 0.4808983469629985
+  f64.mul
+  f64.add
+  local.get $30
+  f64.const -0.36067375954075914
+  local.get $22
+  f64.const 0.2885390073180969
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $30
+  local.get $30
+  f64.mul
+  f64.const -0.2404693555628422
+  local.get $22
+  f64.const 0.2061202382173603
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $31
+  local.get $29
+  local.get $30
+  local.get $31
+  f64.mul
+  f64.add
+  local.get $28
+  f64.add
+ )
+ (func $~lib/math/NativeMath.log2 (param $0 f64) (result f64)
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  call $~lib/util/math/log2_lut
   return
  )
  (func $std/math/test_log2 (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
@@ -8869,14 +8533,14 @@
    i32.const 0
   end
  )
- (func $~lib/math/NativeMathf.log2 (param $0 f32) (result f32)
-  (local $1 f32)
+ (func $~lib/util/math/log2f_lut (param $0 f32) (result f32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
+  (local $7 f64)
   (local $8 f64)
   (local $9 f64)
   (local $10 f64)
@@ -8884,164 +8548,163 @@
   (local $12 f64)
   (local $13 f64)
   (local $14 f64)
-  (local $15 f64)
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/log2f_lut|inlined.0 (result f32)
-   local.get $0
-   local.set $1
+  local.get $0
+  i32.reinterpret_f32
+  local.set $1
+  local.get $1
+  i32.const 8388608
+  i32.sub
+  i32.const 2139095040
+  i32.const 8388608
+  i32.sub
+  i32.ge_u
+  if
+   local.get $1
+   i32.const 2
+   i32.mul
+   i32.const 0
+   i32.eq
+   if
+    f32.const inf
+    f32.neg
+    return
+   end
    local.get $1
-   i32.reinterpret_f32
-   local.set $2
-   local.get $2
-   i32.const 8388608
-   i32.sub
    i32.const 2139095040
-   i32.const 8388608
-   i32.sub
-   i32.ge_u
+   i32.eq
    if
-    local.get $2
+    local.get $0
+    return
+   end
+   local.get $1
+   i32.const 31
+   i32.shr_u
+   if (result i32)
+    i32.const 1
+   else
+    local.get $1
     i32.const 2
     i32.mul
-    i32.const 0
-    i32.eq
-    if
-     f32.const inf
-     f32.neg
-     br $~lib/util/math/log2f_lut|inlined.0
-    end
-    local.get $2
-    i32.const 2139095040
-    i32.eq
-    if
-     local.get $1
-     br $~lib/util/math/log2f_lut|inlined.0
-    end
-    local.get $2
-    i32.const 31
-    i32.shr_u
-    if (result i32)
-     i32.const 1
-    else
-     local.get $2
-     i32.const 2
-     i32.mul
-     i32.const -16777216
-     i32.ge_u
-    end
-    if
-     local.get $1
-     local.get $1
-     f32.sub
-     local.get $1
-     local.get $1
-     f32.sub
-     f32.div
-     br $~lib/util/math/log2f_lut|inlined.0
-    end
-    local.get $1
-    f32.const 8388608
-    f32.mul
-    i32.reinterpret_f32
-    local.set $2
-    local.get $2
-    i32.const 23
-    i32.const 23
-    i32.shl
-    i32.sub
-    local.set $2
+    i32.const -16777216
+    i32.ge_u
    end
-   local.get $2
-   i32.const 1060306944
-   i32.sub
-   local.set $3
-   local.get $3
+   if
+    local.get $0
+    local.get $0
+    f32.sub
+    local.get $0
+    local.get $0
+    f32.sub
+    f32.div
+    return
+   end
+   local.get $0
+   f32.const 8388608
+   f32.mul
+   i32.reinterpret_f32
+   local.set $1
+   local.get $1
    i32.const 23
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 15
-   i32.and
-   local.set $4
-   local.get $3
-   i32.const -8388608
-   i32.and
-   local.set $5
-   local.get $2
-   local.get $5
-   i32.sub
-   local.set $6
-   local.get $3
    i32.const 23
-   i32.shr_s
-   local.set $7
-   i32.const 8984
-   local.get $4
-   i32.const 1
-   i32.const 3
-   i32.add
    i32.shl
-   i32.add
-   f64.load
-   local.set $8
-   i32.const 8984
-   local.get $4
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $9
-   local.get $6
-   f32.reinterpret_i32
-   f64.promote_f32
-   local.set $10
-   local.get $10
-   local.get $8
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $11
-   local.get $9
-   local.get $7
-   f64.convert_i32_s
-   f64.add
-   local.set $12
-   f64.const 0.4811247078767291
-   local.get $11
-   f64.mul
-   f64.const -0.7213476299867769
-   f64.add
-   local.set $13
-   f64.const 1.4426950186867042
-   local.get $11
-   f64.mul
-   local.get $12
-   f64.add
-   local.set $14
-   local.get $11
-   local.get $11
-   f64.mul
-   local.set $15
-   local.get $13
-   f64.const -0.36051725506874704
-   local.get $15
-   f64.mul
-   f64.add
-   local.set $13
-   local.get $13
-   local.get $15
-   f64.mul
-   local.get $14
-   f64.add
-   local.set $13
-   local.get $13
-   f32.demote_f64
+   i32.sub
+   local.set $1
   end
+  local.get $1
+  i32.const 1060306944
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const 23
+  i32.const 4
+  i32.sub
+  i32.shr_u
+  i32.const 15
+  i32.and
+  local.set $3
+  local.get $2
+  i32.const -8388608
+  i32.and
+  local.set $4
+  local.get $1
+  local.get $4
+  i32.sub
+  local.set $5
+  local.get $2
+  i32.const 23
+  i32.shr_s
+  local.set $6
+  i32.const 8984
+  local.get $3
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $7
+  i32.const 8984
+  local.get $3
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $8
+  local.get $5
+  f32.reinterpret_i32
+  f64.promote_f32
+  local.set $9
+  local.get $9
+  local.get $7
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $10
+  local.get $8
+  local.get $6
+  f64.convert_i32_s
+  f64.add
+  local.set $11
+  f64.const 0.4811247078767291
+  local.get $10
+  f64.mul
+  f64.const -0.7213476299867769
+  f64.add
+  local.set $12
+  f64.const 1.4426950186867042
+  local.get $10
+  f64.mul
+  local.get $11
+  f64.add
+  local.set $13
+  local.get $10
+  local.get $10
+  f64.mul
+  local.set $14
+  local.get $12
+  f64.const -0.36051725506874704
+  local.get $14
+  f64.mul
+  f64.add
+  local.set $12
+  local.get $12
+  local.get $14
+  f64.mul
+  local.get $13
+  f64.add
+  local.set $12
+  local.get $12
+  f32.demote_f64
+ )
+ (func $~lib/math/NativeMathf.log2 (param $0 f32) (result f32)
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  call $~lib/util/math/log2f_lut
   return
  )
  (func $std/math/test_log2f (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
@@ -9052,16 +8715,15 @@
   local.get $3
   call $std/math/check<f32>
  )
- (func $std/math/test_max (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32)
-  (local $5 f64)
-  (local $6 f64)
+ (func $~lib/math/NativeMath.max (param $0 f64) (param $1 f64) (result f64)
   local.get $0
-  local.set $6
   local.get $1
-  local.set $5
-  local.get $6
-  local.get $5
   f64.max
+ )
+ (func $std/math/test_max (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/math/NativeMath.max
   local.get $2
   local.get $3
   local.get $4
@@ -9084,31 +8746,29 @@
    i32.const 0
   end
  )
- (func $std/math/test_maxf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32)
-  (local $5 f32)
-  (local $6 f32)
+ (func $~lib/math/NativeMathf.max (param $0 f32) (param $1 f32) (result f32)
   local.get $0
-  local.set $6
   local.get $1
-  local.set $5
-  local.get $6
-  local.get $5
   f32.max
+ )
+ (func $std/math/test_maxf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/math/NativeMathf.max
   local.get $2
   local.get $3
   local.get $4
   call $std/math/check<f32>
  )
- (func $std/math/test_min (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32)
-  (local $5 f64)
-  (local $6 f64)
+ (func $~lib/math/NativeMath.min (param $0 f64) (param $1 f64) (result f64)
   local.get $0
-  local.set $6
   local.get $1
-  local.set $5
-  local.get $6
-  local.get $5
   f64.min
+ )
+ (func $std/math/test_min (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/math/NativeMath.min
   local.get $2
   local.get $3
   local.get $4
@@ -9131,16 +8791,15 @@
    i32.const 0
   end
  )
- (func $std/math/test_minf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32)
-  (local $5 f32)
-  (local $6 f32)
+ (func $~lib/math/NativeMathf.min (param $0 f32) (param $1 f32) (result f32)
   local.get $0
-  local.set $6
   local.get $1
-  local.set $5
-  local.get $6
-  local.get $5
   f32.min
+ )
+ (func $std/math/test_minf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/math/NativeMathf.min
   local.get $2
   local.get $3
   local.get $4
@@ -9683,20 +9342,86 @@
   local.get $4
   call $std/math/check<f32>
  )
- (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
-  (local $2 f64)
-  (local $3 f64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i64)
-  (local $7 i64)
-  (local $8 i64)
-  (local $9 i64)
+ (func $~lib/util/math/zeroinfnan (param $0 i64) (result i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.sub
+  i64.const -9007199254740992
+  i64.const 1
+  i64.sub
+  i64.ge_u
+ )
+ (func $~lib/util/math/checkint (param $0 i64) (result i32)
+  (local $1 i64)
+  local.get $0
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  local.set $1
+  local.get $1
+  i64.const 1023
+  i64.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  i64.gt_u
+  if
+   i32.const 2
+   return
+  end
+  i64.const 1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  local.get $1
+  i64.sub
+  i64.shl
+  local.set $1
+  local.get $0
+  local.get $1
+  i64.const 1
+  i64.sub
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  local.get $1
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 1
+   return
+  end
+  i32.const 2
+ )
+ (func $~lib/util/math/log_inline (param $0 i64) (result f64)
+  (local $1 i64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  (local $9 f64)
   (local $10 f64)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
   (local $15 f64)
   (local $16 f64)
   (local $17 f64)
@@ -9712,1595 +9437,1332 @@
   (local $27 f64)
   (local $28 f64)
   (local $29 f64)
-  (local $30 f64)
-  (local $31 f64)
-  (local $32 f64)
-  (local $33 f64)
-  (local $34 f64)
-  (local $35 f64)
-  (local $36 f64)
-  (local $37 f64)
-  (local $38 f64)
-  (local $39 i32)
-  (local $40 i32)
-  (local $41 i32)
-  (local $42 i32)
-  (local $43 i64)
-  (local $44 i64)
+  local.get $0
+  i64.const 4604531861337669632
+  i64.sub
+  local.set $1
   local.get $1
-  f64.abs
-  f64.const 2
-  f64.le
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shr_u
+  i64.const 127
+  i64.and
+  i32.wrap_i64
+  local.set $2
+  local.get $1
+  i64.const 52
+  i64.shr_s
+  local.set $3
+  local.get $0
+  local.get $1
+  i64.const 4095
+  i64.const 52
+  i64.shl
+  i64.and
+  i64.sub
+  local.set $4
+  local.get $4
+  f64.reinterpret_i64
+  local.set $5
+  local.get $3
+  f64.convert_i64_s
+  local.set $6
+  i32.const 9240
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $7
+  i32.const 9240
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=16
+  local.set $8
+  i32.const 9240
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=24
+  local.set $9
+  local.get $4
+  i64.const 2147483648
+  i64.add
+  i64.const -4294967296
+  i64.and
+  f64.reinterpret_i64
+  local.set $10
+  local.get $5
+  local.get $10
+  f64.sub
+  local.set $11
+  local.get $10
+  local.get $7
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $12
+  local.get $11
+  local.get $7
+  f64.mul
+  local.set $13
+  local.get $12
+  local.get $13
+  f64.add
+  local.set $14
+  local.get $6
+  f64.const 0.6931471805598903
+  f64.mul
+  local.get $8
+  f64.add
+  local.set $15
+  local.get $15
+  local.get $14
+  f64.add
+  local.set $16
+  local.get $6
+  f64.const 5.497923018708371e-14
+  f64.mul
+  local.get $9
+  f64.add
+  local.set $17
+  local.get $15
+  local.get $16
+  f64.sub
+  local.get $14
+  f64.add
+  local.set $18
+  f64.const -0.5
+  local.get $14
+  f64.mul
+  local.set $19
+  local.get $14
+  local.get $19
+  f64.mul
+  local.set $20
+  local.get $14
+  local.get $20
+  f64.mul
+  local.set $21
+  f64.const -0.5
+  local.get $12
+  f64.mul
+  local.set $22
+  local.get $12
+  local.get $22
+  f64.mul
+  local.set $23
+  local.get $16
+  local.get $23
+  f64.add
+  local.set $24
+  local.get $13
+  local.get $19
+  local.get $22
+  f64.add
+  f64.mul
+  local.set $25
+  local.get $16
+  local.get $24
+  f64.sub
+  local.get $23
+  f64.add
+  local.set $26
+  local.get $21
+  f64.const -0.6666666666666679
+  local.get $14
+  f64.const 0.5000000000000007
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const 0.7999999995323976
+  local.get $14
+  f64.const -0.6666666663487739
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const -1.142909628459501
+  local.get $14
+  f64.const 1.0000415263675542
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  local.set $27
+  local.get $17
+  local.get $18
+  f64.add
+  local.get $25
+  f64.add
+  local.get $26
+  f64.add
+  local.get $27
+  f64.add
+  local.set $28
+  local.get $24
+  local.get $28
+  f64.add
+  local.set $29
+  local.get $24
+  local.get $29
+  f64.sub
+  local.get $28
+  f64.add
+  global.set $~lib/util/math/log_tail
+  local.get $29
+ )
+ (func $~lib/util/math/xflow (param $0 i32) (param $1 f64) (result f64)
+  local.get $1
+  f64.neg
+  local.get $1
+  local.get $0
+  select
+  local.get $1
+  f64.mul
+ )
+ (func $~lib/util/math/uflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 1152921504606846976
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/oflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 8070450532247928832
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/exp_inline (param $0 f64) (param $1 f64) (param $2 i32) (result f64)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 f64)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $15
+  local.get $15
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  i32.const 2047
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 969
+  i32.sub
+  i32.const 63
+  i32.ge_u
   if
-   local.get $1
-   f64.const 2
-   f64.eq
-   if
-    local.get $0
-    local.get $0
-    f64.mul
-    return
-   end
-   local.get $1
-   f64.const 0.5
-   f64.eq
-   if
-    local.get $0
-    f64.sqrt
-    f64.abs
-    f64.const inf
-    local.get $0
-    f64.const inf
-    f64.neg
-    f64.ne
-    select
-    return
-   end
-   local.get $1
-   f64.const -1
-   f64.eq
-   if
-    f64.const 1
-    local.get $0
-    f64.div
-    return
-   end
-   local.get $1
-   f64.const 1
-   f64.eq
-   if
-    local.get $0
-    return
-   end
-   local.get $1
-   f64.const 0
-   f64.eq
+   local.get $3
+   i32.const 969
+   i32.sub
+   i32.const -2147483648
+   i32.ge_u
    if
+    f64.const -1
     f64.const 1
+    local.get $2
+    select
     return
    end
-  end
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/pow_lut|inlined.0 (result f64)
-   local.get $0
-   local.set $3
-   local.get $1
-   local.set $2
-   i32.const 0
-   local.set $4
    local.get $3
-   i64.reinterpret_f64
-   local.set $5
-   local.get $2
-   i64.reinterpret_f64
-   local.set $6
-   local.get $5
-   i64.const 52
-   i64.shr_u
-   local.set $7
-   local.get $6
-   i64.const 52
-   i64.shr_u
-   local.set $8
-   local.get $7
-   i64.const 1
-   i64.sub
-   i64.const 2047
-   i64.const 1
-   i64.sub
-   i64.ge_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
-   end
+   i32.const 1033
+   i32.ge_u
    if
-    local.get $6
-    local.set $9
-    local.get $9
-    i64.const 1
-    i64.shl
-    i64.const 1
-    i64.sub
-    i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
-    if
-     local.get $6
-     i64.const 1
-     i64.shl
-     i64.const 0
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const -9007199254740992
-     i64.gt_u
-     if (result i32)
-      i32.const 1
-     else
-      local.get $6
-      i64.const 1
-      i64.shl
-      i64.const -9007199254740992
-      i64.gt_u
-     end
-     if
-      local.get $3
-      local.get $2
-      f64.add
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.lt_u
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     i32.eqz
-     i32.eq
-     if
-      f64.const 0
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $2
-     local.get $2
-     f64.mul
-     br $~lib/util/math/pow_lut|inlined.0
-    end
-    local.get $5
-    local.set $9
-    local.get $9
-    i64.const 1
-    i64.shl
-    i64.const 1
-    i64.sub
-    i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
-    if
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $10
-     local.get $5
-     i64.const 63
-     i64.shr_u
-     i32.wrap_i64
-     if (result i32)
-      block $~lib/util/math/checkint|inlined.0 (result i32)
-       local.get $6
-       local.set $9
-       local.get $9
-       i64.const 52
-       i64.shr_u
-       i64.const 2047
-       i64.and
-       local.set $11
-       local.get $11
-       i64.const 1023
-       i64.lt_u
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $11
-       i64.const 1023
-       i64.const 52
-       i64.add
-       i64.gt_u
-       if
-        i32.const 2
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i64.const 1
-       i64.const 1023
-       i64.const 52
-       i64.add
-       local.get $11
-       i64.sub
-       i64.shl
-       local.set $11
-       local.get $9
-       local.get $11
-       i64.const 1
-       i64.sub
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $9
-       local.get $11
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 1
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i32.const 2
-      end
-      i32.const 1
-      i32.eq
-     else
-      i32.const 0
-     end
-     if
-      local.get $10
-      f64.neg
-      local.set $10
-     end
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     if (result f64)
-      f64.const 1
-      local.get $10
-      f64.div
-     else
-      local.get $10
-     end
-     br $~lib/util/math/pow_lut|inlined.0
-    end
-    local.get $5
+    local.get $15
     i64.const 63
     i64.shr_u
     i64.const 0
     i64.ne
-    if
-     block $~lib/util/math/checkint|inlined.1 (result i32)
-      local.get $6
-      local.set $9
-      local.get $9
-      i64.const 52
-      i64.shr_u
-      i64.const 2047
-      i64.and
-      local.set $11
-      local.get $11
-      i64.const 1023
-      i64.lt_u
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $11
-      i64.const 1023
-      i64.const 52
-      i64.add
-      i64.gt_u
-      if
-       i32.const 2
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i64.const 1
-      i64.const 1023
-      i64.const 52
-      i64.add
-      local.get $11
-      i64.sub
-      i64.shl
-      local.set $11
-      local.get $9
-      local.get $11
-      i64.const 1
-      i64.sub
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $9
-      local.get $11
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 1
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i32.const 2
-     end
-     local.set $12
-     local.get $12
-     i32.const 0
-     i32.eq
-     if
-      local.get $3
-      local.get $3
-      f64.sub
-      local.get $3
-      local.get $3
-      f64.sub
-      f64.div
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $12
+    if (result f64)
+     local.get $2
+     call $~lib/util/math/uflow
+    else
+     local.get $2
+     call $~lib/util/math/oflow
+    end
+    return
+   end
+   i32.const 0
+   local.set $3
+  end
+  f64.const 184.6649652337873
+  local.get $0
+  f64.mul
+  local.set $9
+  local.get $9
+  f64.const 6755399441055744
+  f64.add
+  local.set $8
+  local.get $8
+  i64.reinterpret_f64
+  local.set $4
+  local.get $8
+  f64.const 6755399441055744
+  f64.sub
+  local.set $8
+  local.get $0
+  local.get $8
+  f64.const -0.005415212348111709
+  f64.mul
+  f64.add
+  local.get $8
+  f64.const -1.2864023111638346e-14
+  f64.mul
+  f64.add
+  local.set $10
+  local.get $10
+  local.get $1
+  f64.add
+  local.set $10
+  local.get $4
+  i64.const 127
+  i64.and
+  i64.const 1
+  i64.shl
+  i32.wrap_i64
+  local.set $7
+  local.get $4
+  local.get $2
+  i64.extend_i32_u
+  i64.add
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shl
+  local.set $5
+  i32.const 4632
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  f64.reinterpret_i64
+  local.set $13
+  i32.const 4632
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load offset=8
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $10
+  local.get $10
+  f64.mul
+  local.set $11
+  local.get $13
+  local.get $10
+  f64.add
+  local.get $11
+  f64.const 0.49999999999996786
+  local.get $10
+  f64.const 0.16666666666665886
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $11
+  local.get $11
+  f64.mul
+  f64.const 0.0416666808410674
+  local.get $10
+  f64.const 0.008333335853059549
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $14
+  local.get $3
+  i32.const 0
+  i32.eq
+  if
+   local.get $14
+   local.get $6
+   local.get $4
+   call $~lib/util/math/specialcase
+   return
+  end
+  local.get $6
+  f64.reinterpret_i64
+  local.set $12
+  local.get $12
+  local.get $12
+  local.get $14
+  f64.mul
+  f64.add
+ )
+ (func $~lib/util/math/pow_lut (param $0 f64) (param $1 f64) (result f64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 f64)
+  (local $8 i32)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 f64)
+  (local $16 f64)
+  i32.const 0
+  local.set $2
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $1
+  i64.reinterpret_f64
+  local.set $4
+  local.get $3
+  i64.const 52
+  i64.shr_u
+  local.set $5
+  local.get $4
+  i64.const 52
+  i64.shr_u
+  local.set $6
+  local.get $5
+  i64.const 1
+  i64.sub
+  i64.const 2047
+  i64.const 1
+  i64.sub
+  i64.ge_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $6
+   i64.const 2047
+   i64.and
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
+   i64.sub
+   i64.ge_u
+  end
+  if
+   local.get $4
+   call $~lib/util/math/zeroinfnan
+   if
+    local.get $4
+    i64.const 1
+    i64.shl
+    i64.const 0
+    i64.eq
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
+    if
+     f64.const nan:0x8000000000000
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const -9007199254740992
+    i64.gt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $4
+     i64.const 1
+     i64.shl
+     i64.const -9007199254740992
+     i64.gt_u
+    end
+    if
+     local.get $0
+     local.get $1
+     f64.add
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const 9214364837600034816
+    i64.eq
+    if
+     f64.const nan:0x8000000000000
+     return
+    end
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const 9214364837600034816
+    i64.lt_u
+    local.get $4
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    i32.eqz
+    i32.eq
+    if
+     f64.const 0
+     return
+    end
+    local.get $1
+    local.get $1
+    f64.mul
+    return
+   end
+   local.get $3
+   call $~lib/util/math/zeroinfnan
+   if
+    local.get $0
+    local.get $0
+    f64.mul
+    local.set $7
+    local.get $3
+    i64.const 63
+    i64.shr_u
+    i32.wrap_i64
+    if (result i32)
+     local.get $4
+     call $~lib/util/math/checkint
      i32.const 1
      i32.eq
-     if
-      i32.const 262144
-      local.set $4
-     end
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
+    else
+     i32.const 0
+    end
+    if
      local.get $7
-     i64.const 2047
-     i64.and
+     f64.neg
      local.set $7
     end
+    local.get $4
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    if (result f64)
+     f64.const 1
+     local.get $7
+     f64.div
+    else
+     local.get $7
+    end
+    return
+   end
+   local.get $3
+   i64.const 63
+   i64.shr_u
+   i64.const 0
+   i64.ne
+   if
+    local.get $4
+    call $~lib/util/math/checkint
+    local.set $8
     local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
+    i32.const 0
+    i32.eq
     if
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $8
-     i64.const 2047
-     i64.and
-     i64.const 958
-     i64.lt_u
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.gt_u
-     local.get $8
-     i64.const 2048
-     i64.lt_u
-     i32.eq
-     if (result f64)
-      f64.const inf
-     else
-      f64.const 0
-     end
-     br $~lib/util/math/pow_lut|inlined.0
+     local.get $0
+     local.get $0
+     f64.sub
+     local.get $0
+     local.get $0
+     f64.sub
+     f64.div
+     return
     end
-    local.get $7
-    i64.const 0
-    i64.eq
+    local.get $8
+    i32.const 1
+    i32.eq
     if
-     local.get $3
-     f64.const 4503599627370496
-     f64.mul
-     i64.reinterpret_f64
-     local.set $5
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
-     local.get $5
-     i64.const 52
-     i64.const 52
-     i64.shl
-     i64.sub
-     local.set $5
+     i32.const 262144
+     local.set $2
     end
+    local.get $3
+    i64.const 9223372036854775807
+    i64.and
+    local.set $3
+    local.get $5
+    i64.const 2047
+    i64.and
+    local.set $5
    end
-   local.get $5
-   local.set $9
-   local.get $9
-   i64.const 4604531861337669632
-   i64.sub
-   local.set $11
-   local.get $11
-   i64.const 52
-   i64.const 7
-   i64.sub
-   i64.shr_u
-   i64.const 127
-   i64.and
-   i32.wrap_i64
-   local.set $12
-   local.get $11
-   i64.const 52
-   i64.shr_s
-   local.set $13
-   local.get $9
-   local.get $11
-   i64.const 4095
-   i64.const 52
-   i64.shl
-   i64.and
-   i64.sub
-   local.set $14
-   local.get $14
-   f64.reinterpret_i64
-   local.set $10
-   local.get $13
-   f64.convert_i64_s
-   local.set $15
-   i32.const 9240
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $16
-   i32.const 9240
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=16
-   local.set $17
-   i32.const 9240
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=24
-   local.set $18
-   local.get $14
-   i64.const 2147483648
-   i64.add
-   i64.const -4294967296
-   i64.and
-   f64.reinterpret_i64
-   local.set $19
-   local.get $10
-   local.get $19
-   f64.sub
-   local.set $20
-   local.get $19
-   local.get $16
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $21
-   local.get $20
-   local.get $16
-   f64.mul
-   local.set $22
-   local.get $21
-   local.get $22
-   f64.add
-   local.set $23
-   local.get $15
-   f64.const 0.6931471805598903
-   f64.mul
-   local.get $17
-   f64.add
-   local.set $24
-   local.get $24
-   local.get $23
-   f64.add
-   local.set $25
-   local.get $15
-   f64.const 5.497923018708371e-14
-   f64.mul
-   local.get $18
-   f64.add
-   local.set $26
-   local.get $24
-   local.get $25
-   f64.sub
-   local.get $23
-   f64.add
-   local.set $27
-   f64.const -0.5
-   local.get $23
-   f64.mul
-   local.set $28
-   local.get $23
-   local.get $28
-   f64.mul
-   local.set $29
-   local.get $23
-   local.get $29
-   f64.mul
-   local.set $30
-   f64.const -0.5
-   local.get $21
-   f64.mul
-   local.set $31
-   local.get $21
-   local.get $31
-   f64.mul
-   local.set $32
-   local.get $25
-   local.get $32
-   f64.add
-   local.set $33
-   local.get $22
-   local.get $28
-   local.get $31
-   f64.add
-   f64.mul
-   local.set $34
-   local.get $25
-   local.get $33
-   f64.sub
-   local.get $32
-   f64.add
-   local.set $35
-   local.get $30
-   f64.const -0.6666666666666679
-   local.get $23
-   f64.const 0.5000000000000007
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const 0.7999999995323976
-   local.get $23
-   f64.const -0.6666666663487739
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const -1.142909628459501
-   local.get $23
-   f64.const 1.0000415263675542
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.set $36
-   local.get $26
-   local.get $27
-   f64.add
-   local.get $34
-   f64.add
-   local.get $35
-   f64.add
-   local.get $36
-   f64.add
-   local.set $37
-   local.get $33
-   local.get $37
-   f64.add
-   local.set $38
-   local.get $33
-   local.get $38
-   f64.sub
-   local.get $37
-   f64.add
-   global.set $~lib/util/math/log_tail
-   local.get $38
-   local.set $38
-   global.get $~lib/util/math/log_tail
-   local.set $37
    local.get $6
-   i64.const -134217728
-   i64.and
-   f64.reinterpret_i64
-   local.set $34
-   local.get $2
-   local.get $34
-   f64.sub
-   local.set $33
-   local.get $38
-   i64.reinterpret_f64
-   i64.const -134217728
+   i64.const 2047
    i64.and
-   f64.reinterpret_i64
-   local.set $32
-   local.get $38
-   local.get $32
-   f64.sub
-   local.get $37
-   f64.add
-   local.set $31
-   local.get $34
-   local.get $32
-   f64.mul
-   local.set $36
-   local.get $33
-   local.get $32
-   f64.mul
-   local.get $2
-   local.get $31
-   f64.mul
-   f64.add
-   local.set $35
-   block $~lib/util/math/exp_inline|inlined.0 (result f64)
-    local.get $36
-    local.set $15
-    local.get $35
-    local.set $10
-    local.get $4
-    local.set $12
-    local.get $15
-    i64.reinterpret_f64
-    local.set $9
-    local.get $9
-    i64.const 52
-    i64.shr_u
-    i32.wrap_i64
-    i32.const 2047
-    i32.and
-    local.set $39
-    local.get $39
-    i32.const 969
-    i32.sub
-    i32.const 63
-    i32.ge_u
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
+   i64.sub
+   i64.ge_u
+   if
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
     if
-     local.get $39
-     i32.const 969
-     i32.sub
-     i32.const -2147483648
-     i32.ge_u
-     if
-      f64.const -1
-      f64.const 1
-      local.get $12
-      select
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     local.get $39
-     i32.const 1033
-     i32.ge_u
-     if
-      local.get $9
-      i64.const 63
-      i64.shr_u
-      i64.const 0
-      i64.ne
-      if (result f64)
-       local.get $12
-       local.set $41
-       local.get $41
-       local.set $42
-       i64.const 1152921504606846976
-       f64.reinterpret_i64
-       local.set $16
-       local.get $16
-       f64.neg
-       local.get $16
-       local.get $42
-       select
-       local.get $16
-       f64.mul
-      else
-       local.get $12
-       local.set $42
-       local.get $42
-       local.set $41
-       i64.const 8070450532247928832
-       f64.reinterpret_i64
-       local.set $17
-       local.get $17
-       f64.neg
-       local.get $17
-       local.get $41
-       select
-       local.get $17
-       f64.mul
-      end
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     i32.const 0
-     local.set $39
+     f64.const 1
+     return
     end
-    f64.const 184.6649652337873
-    local.get $15
+    local.get $6
+    i64.const 2047
+    i64.and
+    i64.const 958
+    i64.lt_u
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.gt_u
+    local.get $6
+    i64.const 2048
+    i64.lt_u
+    i32.eq
+    if (result f64)
+     f64.const inf
+    else
+     f64.const 0
+    end
+    return
+   end
+   local.get $5
+   i64.const 0
+   i64.eq
+   if
+    local.get $0
+    f64.const 4503599627370496
     f64.mul
-    local.set $29
-    local.get $29
-    f64.const 6755399441055744
-    f64.add
-    local.set $30
-    local.get $30
     i64.reinterpret_f64
-    local.set $14
-    local.get $30
-    f64.const 6755399441055744
-    f64.sub
-    local.set $30
-    local.get $15
-    local.get $30
-    f64.const -0.005415212348111709
-    f64.mul
-    f64.add
-    local.get $30
-    f64.const -1.2864023111638346e-14
-    f64.mul
-    f64.add
-    local.set $28
-    local.get $28
-    local.get $10
-    f64.add
-    local.set $28
-    local.get $14
-    i64.const 127
+    local.set $3
+    local.get $3
+    i64.const 9223372036854775807
     i64.and
-    i64.const 1
-    i64.shl
-    i32.wrap_i64
-    local.set $40
-    local.get $14
-    local.get $12
-    i64.extend_i32_u
-    i64.add
+    local.set $3
+    local.get $3
+    i64.const 52
     i64.const 52
-    i64.const 7
-    i64.sub
     i64.shl
-    local.set $13
-    i32.const 4632
-    local.get $40
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load
-    f64.reinterpret_i64
-    local.set $25
-    i32.const 4632
-    local.get $40
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load offset=8
-    local.get $13
-    i64.add
-    local.set $11
-    local.get $28
-    local.get $28
-    f64.mul
-    local.set $27
-    local.get $25
-    local.get $28
-    f64.add
-    local.get $27
-    f64.const 0.49999999999996786
-    local.get $28
-    f64.const 0.16666666666665886
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $27
-    local.get $27
-    f64.mul
-    f64.const 0.0416666808410674
-    local.get $28
-    f64.const 0.008333335853059549
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $24
-    local.get $39
-    i32.const 0
-    i32.eq
-    if
-     block $~lib/util/math/specialcase|inlined.1 (result f64)
-      local.get $24
-      local.set $18
-      local.get $11
-      local.set $44
-      local.get $14
-      local.set $43
-      local.get $43
-      i64.const 2147483648
-      i64.and
-      i64.const 0
-      i64.ne
-      i32.eqz
-      if
-       local.get $44
-       i64.const 1009
-       i64.const 52
-       i64.shl
-       i64.sub
-       local.set $44
-       local.get $44
-       f64.reinterpret_i64
-       local.set $17
-       f64.const 5486124068793688683255936e279
-       local.get $17
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       f64.mul
-       br $~lib/util/math/specialcase|inlined.1
-      end
-      local.get $44
-      i64.const 1022
-      i64.const 52
-      i64.shl
-      i64.add
-      local.set $44
-      local.get $44
-      f64.reinterpret_i64
-      local.set $17
-      local.get $17
-      local.get $17
-      local.get $18
-      f64.mul
-      f64.add
-      local.set $16
-      local.get $16
-      f64.abs
-      f64.const 1
-      f64.lt
-      if
-       f64.const 1
-       local.get $16
-       f64.copysign
-       local.set $23
-       local.get $17
-       local.get $16
-       f64.sub
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       local.set $22
-       local.get $23
-       local.get $16
-       f64.add
-       local.set $21
-       local.get $23
-       local.get $21
-       f64.sub
-       local.get $16
-       f64.add
-       local.get $22
-       f64.add
-       local.set $22
-       local.get $21
-       local.get $22
-       f64.add
-       local.get $23
-       f64.sub
-       local.set $16
-       local.get $16
-       f64.const 0
-       f64.eq
-       if
-        local.get $44
-        i64.const -9223372036854775808
-        i64.and
-        f64.reinterpret_i64
-        local.set $16
-       end
-      end
-      local.get $16
-      f64.const 2.2250738585072014e-308
-      f64.mul
-     end
-     br $~lib/util/math/exp_inline|inlined.0
-    end
-    local.get $11
-    f64.reinterpret_i64
-    local.set $26
-    local.get $26
-    local.get $26
-    local.get $24
+    i64.sub
+    local.set $3
+   end
+  end
+  local.get $3
+  call $~lib/util/math/log_inline
+  local.set $9
+  global.get $~lib/util/math/log_tail
+  local.set $10
+  local.get $4
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $13
+  local.get $1
+  local.get $13
+  f64.sub
+  local.set $14
+  local.get $9
+  i64.reinterpret_f64
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $15
+  local.get $9
+  local.get $15
+  f64.sub
+  local.get $10
+  f64.add
+  local.set $16
+  local.get $13
+  local.get $15
+  f64.mul
+  local.set $11
+  local.get $14
+  local.get $15
+  f64.mul
+  local.get $1
+  local.get $16
+  f64.mul
+  f64.add
+  local.set $12
+  local.get $11
+  local.get $12
+  local.get $2
+  call $~lib/util/math/exp_inline
+ )
+ (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
+  local.get $1
+  f64.abs
+  f64.const 2
+  f64.le
+  if
+   local.get $1
+   f64.const 2
+   f64.eq
+   if
+    local.get $0
+    local.get $0
     f64.mul
-    f64.add
+    return
+   end
+   local.get $1
+   f64.const 0.5
+   f64.eq
+   if
+    local.get $0
+    f64.sqrt
+    f64.abs
+    f64.const inf
+    local.get $0
+    f64.const inf
+    f64.neg
+    f64.ne
+    select
+    return
+   end
+   local.get $1
+   f64.const -1
+   f64.eq
+   if
+    f64.const 1
+    local.get $0
+    f64.div
+    return
+   end
+   local.get $1
+   f64.const 1
+   f64.eq
+   if
+    local.get $0
+    return
+   end
+   local.get $1
+   f64.const 0
+   f64.eq
+   if
+    f64.const 1
+    return
    end
   end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  local.get $1
+  call $~lib/util/math/pow_lut
   return
  )
- (func $std/math/test_pow (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32)
+ (func $std/math/test_pow (param $0 f64) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/math/NativeMath.pow
+  local.get $2
+  local.get $3
+  local.get $4
+  call $std/math/check<f64>
+  if (result i32)
+   global.get $std/math/js
+   i32.eqz
+   if (result i32)
+    i32.const 1
+   else
+    local.get $0
+    local.get $1
+    call $~lib/bindings/Math/pow
+    local.get $2
+    local.get $3
+    local.get $4
+    call $std/math/check<f64>
+   end
+  else
+   i32.const 0
+  end
+ )
+ (func $~lib/util/math/zeroinfnanf (param $0 i32) (result i32)
+  local.get $0
+  i32.const 1
+  i32.shl
+  i32.const 1
+  i32.sub
+  i32.const 2139095040
+  i32.const 1
+  i32.shl
+  i32.const 1
+  i32.sub
+  i32.ge_u
+ )
+ (func $~lib/util/math/checkintf (param $0 i32) (result i32)
+  (local $1 i32)
+  local.get $0
+  i32.const 23
+  i32.shr_u
+  i32.const 255
+  i32.and
+  local.set $1
+  local.get $1
+  i32.const 127
+  i32.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i32.const 127
+  i32.const 23
+  i32.add
+  i32.gt_u
+  if
+   i32.const 2
+   return
+  end
+  i32.const 1
+  i32.const 127
+  i32.const 23
+  i32.add
+  local.get $1
+  i32.sub
+  i32.shl
+  local.set $1
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.and
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.and
+  if
+   i32.const 1
+   return
+  end
+  i32.const 2
+ )
+ (func $~lib/util/math/log2f_inline (param $0 i32) (result f64)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  local.get $0
+  i32.const 1060306944
+  i32.sub
+  local.set $1
+  local.get $1
+  i32.const 23
+  i32.const 4
+  i32.sub
+  i32.shr_u
+  i32.const 15
+  i32.and
+  local.set $2
+  local.get $1
+  i32.const -8388608
+  i32.and
+  local.set $3
+  local.get $0
+  local.get $3
+  i32.sub
+  local.set $4
+  local.get $3
+  i32.const 23
+  i32.shr_s
+  local.set $5
+  i32.const 8984
+  local.get $2
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $6
+  i32.const 8984
+  local.get $2
+  i32.const 1
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=8
+  local.set $7
+  local.get $4
+  f32.reinterpret_i32
+  f64.promote_f32
+  local.set $8
+  local.get $8
+  local.get $6
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $9
+  local.get $7
+  local.get $5
+  f64.convert_i32_s
+  f64.add
+  local.set $10
+  f64.const 0.288457581109214
+  local.get $9
+  f64.mul
+  f64.const -0.36092606229713164
+  f64.add
+  local.set $11
+  f64.const 0.480898481472577
+  local.get $9
+  f64.mul
+  f64.const -0.7213474675006291
+  f64.add
+  local.set $12
+  f64.const 1.4426950408774342
+  local.get $9
+  f64.mul
+  local.get $10
+  f64.add
+  local.set $13
+  local.get $9
+  local.get $9
+  f64.mul
+  local.set $9
+  local.get $13
+  local.get $12
+  local.get $9
+  f64.mul
+  f64.add
+  local.set $13
+  local.get $11
+  local.get $9
+  local.get $9
+  f64.mul
+  f64.mul
+  local.get $13
+  f64.add
+  local.set $11
+  local.get $11
+ )
+ (func $~lib/util/math/xflowf (param $0 i32) (param $1 f32) (result f32)
+  local.get $1
+  f32.neg
+  local.get $1
   local.get $0
+  select
   local.get $1
-  call $~lib/math/NativeMath.pow
+  f32.mul
+ )
+ (func $~lib/util/math/oflowf (param $0 i32) (result f32)
+  local.get $0
+  i32.const 1879048192
+  f32.reinterpret_i32
+  call $~lib/util/math/xflowf
+ )
+ (func $~lib/util/math/uflowf (param $0 i32) (result f32)
+  local.get $0
+  i32.const 268435456
+  f32.reinterpret_i32
+  call $~lib/util/math/xflowf
+ )
+ (func $~lib/util/math/exp2f_inline (param $0 f64) (param $1 i32) (result f32)
+  (local $2 f64)
+  (local $3 i64)
+  (local $4 f64)
+  (local $5 i64)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  local.get $0
+  f64.const 211106232532992
+  f64.add
+  local.set $2
+  local.get $2
+  i64.reinterpret_f64
+  local.set $3
+  local.get $0
   local.get $2
+  f64.const 211106232532992
+  f64.sub
+  f64.sub
+  local.set $4
+  i32.const 6680
+  local.get $3
+  i32.wrap_i64
+  i32.const 31
+  i32.and
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  local.set $5
+  local.get $5
   local.get $3
+  local.get $1
+  i64.extend_i32_u
+  i64.add
+  i64.const 52
+  i64.const 5
+  i64.sub
+  i64.shl
+  i64.add
+  local.set $5
+  local.get $5
+  f64.reinterpret_i64
+  local.set $8
+  f64.const 0.05550361559341535
   local.get $4
-  call $std/math/check<f64>
-  if (result i32)
-   global.get $std/math/js
-   i32.eqz
-   if (result i32)
-    i32.const 1
-   else
-    local.get $0
-    local.get $1
-    call $~lib/bindings/Math/pow
-    local.get $2
-    local.get $3
-    local.get $4
-    call $std/math/check<f64>
-   end
-  else
-   i32.const 0
-  end
+  f64.mul
+  f64.const 0.2402284522445722
+  f64.add
+  local.set $6
+  f64.const 0.6931471806916203
+  local.get $4
+  f64.mul
+  f64.const 1
+  f64.add
+  local.set $7
+  local.get $7
+  local.get $6
+  local.get $4
+  local.get $4
+  f64.mul
+  f64.mul
+  f64.add
+  local.set $7
+  local.get $7
+  local.get $8
+  f64.mul
+  local.set $7
+  local.get $7
+  f32.demote_f64
  )
- (func $~lib/math/NativeMathf.pow (param $0 f32) (param $1 f32) (result f32)
-  (local $2 f32)
-  (local $3 f32)
+ (func $~lib/util/math/powf_lut (param $0 f32) (param $1 f32) (result f32)
+  (local $2 i32)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 f32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 f32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 f64)
-  (local $16 f64)
-  (local $17 f64)
-  (local $18 f64)
-  (local $19 f64)
-  (local $20 f64)
-  (local $21 f64)
-  (local $22 f64)
-  (local $23 i64)
-  (local $24 i64)
+  (local $8 f64)
+  (local $9 f64)
+  i32.const 0
+  local.set $2
+  local.get $0
+  i32.reinterpret_f32
+  local.set $3
   local.get $1
-  f32.abs
-  f32.const 2
-  f32.le
-  if
-   local.get $1
-   f32.const 2
-   f32.eq
-   if
-    local.get $0
-    local.get $0
-    f32.mul
-    return
-   end
-   local.get $1
-   f32.const 0.5
-   f32.eq
-   if
-    local.get $0
-    f32.sqrt
-    f32.abs
-    f32.const inf
-    local.get $0
-    f32.const inf
-    f32.neg
-    f32.ne
-    select
-    return
-   end
-   local.get $1
-   f32.const -1
-   f32.eq
-   if
-    f32.const 1
-    local.get $0
-    f32.div
-    return
-   end
-   local.get $1
-   f32.const 1
-   f32.eq
-   if
-    local.get $0
-    return
-   end
-   local.get $1
-   f32.const 0
-   f32.eq
-   if
-    f32.const 1
-    return
-   end
-  end
+  i32.reinterpret_f32
+  local.set $4
   i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/powf_lut|inlined.0 (result f32)
-   local.get $0
-   local.set $3
-   local.get $1
-   local.set $2
-   i32.const 0
-   local.set $4
-   local.get $3
-   i32.reinterpret_f32
-   local.set $5
-   local.get $2
-   i32.reinterpret_f32
-   local.set $6
-   i32.const 0
-   local.set $7
+  local.set $5
+  local.get $3
+  i32.const 8388608
+  i32.sub
+  i32.const 2139095040
+  i32.const 8388608
+  i32.sub
+  i32.ge_u
+  local.get $4
+  call $~lib/util/math/zeroinfnanf
+  local.tee $5
+  i32.or
+  if
    local.get $5
-   i32.const 8388608
-   i32.sub
-   i32.const 2139095040
-   i32.const 8388608
-   i32.sub
-   i32.ge_u
-   local.get $6
-   local.set $8
-   local.get $8
-   i32.const 1
-   i32.shl
-   i32.const 1
-   i32.sub
-   i32.const 2139095040
-   i32.const 1
-   i32.shl
-   i32.const 1
-   i32.sub
-   i32.ge_u
-   i32.const 0
-   i32.ne
-   local.tee $7
-   i32.or
    if
-    local.get $7
+    local.get $4
+    i32.const 1
+    i32.shl
+    i32.const 0
+    i32.eq
     if
-     local.get $6
+     f32.const 1
+     return
+    end
+    local.get $3
+    i32.const 1065353216
+    i32.eq
+    if
+     f32.const nan:0x400000
+     return
+    end
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.const 2139095040
+    i32.const 1
+    i32.shl
+    i32.gt_u
+    if (result i32)
      i32.const 1
-     i32.shl
-     i32.const 0
-     i32.eq
-     if
-      f32.const 1
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
-     i32.const 1065353216
-     i32.eq
-     if
-      f32.const nan:0x400000
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
+    else
+     local.get $4
      i32.const 1
      i32.shl
      i32.const 2139095040
      i32.const 1
      i32.shl
      i32.gt_u
-     if (result i32)
-      i32.const 1
-     else
-      local.get $6
-      i32.const 1
-      i32.shl
-      i32.const 2139095040
-      i32.const 1
-      i32.shl
-      i32.gt_u
-     end
-     if
-      local.get $3
-      local.get $2
-      f32.add
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.const 1065353216
-     i32.const 1
-     i32.shl
-     i32.eq
-     if
-      f32.const nan:0x400000
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.const 1065353216
-     i32.const 1
-     i32.shl
-     i32.lt_u
-     local.get $6
-     i32.const 31
-     i32.shr_u
-     i32.eqz
-     i32.eq
-     if
-      f32.const 0
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $2
-     local.get $2
-     f32.mul
-     br $~lib/util/math/powf_lut|inlined.0
     end
-    local.get $5
-    local.set $8
-    local.get $8
+    if
+     local.get $0
+     local.get $1
+     f32.add
+     return
+    end
+    local.get $3
     i32.const 1
     i32.shl
-    i32.const 1
-    i32.sub
-    i32.const 2139095040
+    i32.const 1065353216
     i32.const 1
     i32.shl
-    i32.const 1
-    i32.sub
-    i32.ge_u
-    if
-     local.get $3
-     local.get $3
-     f32.mul
-     local.set $9
-     local.get $5
-     i32.const 31
-     i32.shr_u
-     if (result i32)
-      block $~lib/util/math/checkintf|inlined.0 (result i32)
-       local.get $6
-       local.set $8
-       local.get $8
-       i32.const 23
-       i32.shr_u
-       i32.const 255
-       i32.and
-       local.set $10
-       local.get $10
-       i32.const 127
-       i32.lt_u
-       if
-        i32.const 0
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       local.get $10
-       i32.const 127
-       i32.const 23
-       i32.add
-       i32.gt_u
-       if
-        i32.const 2
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       i32.const 1
-       i32.const 127
-       i32.const 23
-       i32.add
-       local.get $10
-       i32.sub
-       i32.shl
-       local.set $10
-       local.get $8
-       local.get $10
-       i32.const 1
-       i32.sub
-       i32.and
-       if
-        i32.const 0
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       local.get $8
-       local.get $10
-       i32.and
-       if
-        i32.const 1
-        br $~lib/util/math/checkintf|inlined.0
-       end
-       i32.const 2
-      end
-      i32.const 1
-      i32.eq
-     else
-      i32.const 0
-     end
-     if
-      local.get $9
-      f32.neg
-      local.set $9
-     end
-     local.get $6
-     i32.const 31
-     i32.shr_u
-     if (result f32)
-      f32.const 1
-      local.get $9
-      f32.div
-     else
-      local.get $9
-     end
-     br $~lib/util/math/powf_lut|inlined.0
-    end
-    local.get $5
-    i32.const 31
-    i32.shr_u
+    i32.eq
     if
-     block $~lib/util/math/checkintf|inlined.1 (result i32)
-      local.get $6
-      local.set $8
-      local.get $8
-      i32.const 23
-      i32.shr_u
-      i32.const 255
-      i32.and
-      local.set $10
-      local.get $10
-      i32.const 127
-      i32.lt_u
-      if
-       i32.const 0
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      local.get $10
-      i32.const 127
-      i32.const 23
-      i32.add
-      i32.gt_u
-      if
-       i32.const 2
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      i32.const 1
-      i32.const 127
-      i32.const 23
-      i32.add
-      local.get $10
-      i32.sub
-      i32.shl
-      local.set $10
-      local.get $8
-      local.get $10
-      i32.const 1
-      i32.sub
-      i32.and
-      if
-       i32.const 0
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      local.get $8
-      local.get $10
-      i32.and
-      if
-       i32.const 1
-       br $~lib/util/math/checkintf|inlined.1
-      end
-      i32.const 2
-     end
-     local.set $10
-     local.get $10
-     i32.const 0
-     i32.eq
-     if
-      local.get $3
-      local.get $3
-      f32.sub
-      local.get $3
-      local.get $3
-      f32.sub
-      f32.div
-      br $~lib/util/math/powf_lut|inlined.0
-     end
-     local.get $10
-     i32.const 1
-     i32.eq
-     if
-      i32.const 65536
-      local.set $4
-     end
-     local.get $5
-     i32.const 2147483647
-     i32.and
-     local.set $5
+     f32.const nan:0x400000
+     return
     end
-    local.get $5
-    i32.const 8388608
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.const 1065353216
+    i32.const 1
+    i32.shl
     i32.lt_u
+    local.get $4
+    i32.const 31
+    i32.shr_u
+    i32.eqz
+    i32.eq
     if
-     local.get $3
-     f32.const 8388608
-     f32.mul
-     i32.reinterpret_f32
-     local.set $5
-     local.get $5
-     i32.const 2147483647
-     i32.and
-     local.set $5
-     local.get $5
-     i32.const 23
-     i32.const 23
-     i32.shl
-     i32.sub
-     local.set $5
+     f32.const 0
+     return
     end
+    local.get $1
+    local.get $1
+    f32.mul
+    return
    end
-   local.get $5
-   local.set $8
-   local.get $8
-   i32.const 1060306944
-   i32.sub
-   local.set $10
-   local.get $10
-   i32.const 23
-   i32.const 4
-   i32.sub
-   i32.shr_u
-   i32.const 15
-   i32.and
-   local.set $11
-   local.get $10
-   i32.const -8388608
-   i32.and
-   local.set $12
-   local.get $8
-   local.get $12
-   i32.sub
-   local.set $13
-   local.get $12
-   i32.const 23
-   i32.shr_s
-   local.set $14
-   i32.const 8984
-   local.get $11
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $15
-   i32.const 8984
-   local.get $11
-   i32.const 1
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=8
-   local.set $16
-   local.get $13
-   f32.reinterpret_i32
-   f64.promote_f32
-   local.set $17
-   local.get $17
-   local.get $15
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $18
-   local.get $16
-   local.get $14
-   f64.convert_i32_s
-   f64.add
-   local.set $19
-   f64.const 0.288457581109214
-   local.get $18
-   f64.mul
-   f64.const -0.36092606229713164
-   f64.add
-   local.set $20
-   f64.const 0.480898481472577
-   local.get $18
-   f64.mul
-   f64.const -0.7213474675006291
-   f64.add
-   local.set $21
-   f64.const 1.4426950408774342
-   local.get $18
-   f64.mul
-   local.get $19
-   f64.add
-   local.set $22
-   local.get $18
-   local.get $18
-   f64.mul
-   local.set $18
-   local.get $22
-   local.get $21
-   local.get $18
-   f64.mul
-   f64.add
-   local.set $22
-   local.get $20
-   local.get $18
-   local.get $18
-   f64.mul
-   f64.mul
-   local.get $22
-   f64.add
-   local.set $20
-   local.get $20
-   local.set $22
-   local.get $2
-   f64.promote_f32
-   local.get $22
-   f64.mul
-   local.set $21
-   local.get $21
-   i64.reinterpret_f64
-   i64.const 47
-   i64.shr_u
-   i64.const 65535
-   i64.and
-   i64.const 32959
-   i64.ge_u
+   local.get $3
+   call $~lib/util/math/zeroinfnanf
    if
-    local.get $21
-    f64.const 127.99999995700433
-    f64.gt
-    if
+    local.get $0
+    local.get $0
+    f32.mul
+    local.set $6
+    local.get $3
+    i32.const 31
+    i32.shr_u
+    if (result i32)
      local.get $4
-     local.set $8
-     local.get $8
-     local.set $10
-     i32.const 1879048192
-     f32.reinterpret_i32
-     local.set $9
-     local.get $9
-     f32.neg
-     local.get $9
-     local.get $10
-     select
-     local.get $9
-     f32.mul
-     br $~lib/util/math/powf_lut|inlined.0
+     call $~lib/util/math/checkintf
+     i32.const 1
+     i32.eq
+    else
+     i32.const 0
     end
-    local.get $21
-    f64.const -150
-    f64.le
     if
-     local.get $4
-     local.set $11
-     local.get $11
-     local.set $12
-     i32.const 268435456
-     f32.reinterpret_i32
-     local.set $9
-     local.get $9
+     local.get $6
      f32.neg
-     local.get $9
-     local.get $12
-     select
-     local.get $9
-     f32.mul
-     br $~lib/util/math/powf_lut|inlined.0
+     local.set $6
+    end
+    local.get $4
+    i32.const 31
+    i32.shr_u
+    if (result f32)
+     f32.const 1
+     local.get $6
+     f32.div
+    else
+     local.get $6
     end
+    return
    end
-   local.get $21
-   local.set $15
-   local.get $4
-   local.set $13
-   local.get $15
-   f64.const 211106232532992
-   f64.add
-   local.set $20
-   local.get $20
-   i64.reinterpret_f64
-   local.set $23
-   local.get $15
-   local.get $20
-   f64.const 211106232532992
-   f64.sub
-   f64.sub
-   local.set $19
-   i32.const 6680
-   local.get $23
-   i32.wrap_i64
+   local.get $3
    i32.const 31
-   i32.and
-   i32.const 3
-   i32.shl
-   i32.add
-   i64.load
-   local.set $24
-   local.get $24
-   local.get $23
-   local.get $13
-   i64.extend_i32_u
-   i64.add
-   i64.const 52
-   i64.const 5
-   i64.sub
-   i64.shl
-   i64.add
-   local.set $24
-   local.get $24
-   f64.reinterpret_i64
-   local.set $16
-   f64.const 0.05550361559341535
-   local.get $19
-   f64.mul
-   f64.const 0.2402284522445722
-   f64.add
-   local.set $18
-   f64.const 0.6931471806916203
-   local.get $19
-   f64.mul
-   f64.const 1
-   f64.add
-   local.set $17
-   local.get $17
-   local.get $18
-   local.get $19
-   local.get $19
-   f64.mul
-   f64.mul
-   f64.add
-   local.set $17
-   local.get $17
-   local.get $16
-   f64.mul
-   local.set $17
-   local.get $17
-   f32.demote_f64
+   i32.shr_u
+   if
+    local.get $4
+    call $~lib/util/math/checkintf
+    local.set $7
+    local.get $7
+    i32.const 0
+    i32.eq
+    if
+     local.get $0
+     local.get $0
+     f32.sub
+     local.get $0
+     local.get $0
+     f32.sub
+     f32.div
+     return
+    end
+    local.get $7
+    i32.const 1
+    i32.eq
+    if
+     i32.const 65536
+     local.set $2
+    end
+    local.get $3
+    i32.const 2147483647
+    i32.and
+    local.set $3
+   end
+   local.get $3
+   i32.const 8388608
+   i32.lt_u
+   if
+    local.get $0
+    f32.const 8388608
+    f32.mul
+    i32.reinterpret_f32
+    local.set $3
+    local.get $3
+    i32.const 2147483647
+    i32.and
+    local.set $3
+    local.get $3
+    i32.const 23
+    i32.const 23
+    i32.shl
+    i32.sub
+    local.set $3
+   end
+  end
+  local.get $3
+  call $~lib/util/math/log2f_inline
+  local.set $8
+  local.get $1
+  f64.promote_f32
+  local.get $8
+  f64.mul
+  local.set $9
+  local.get $9
+  i64.reinterpret_f64
+  i64.const 47
+  i64.shr_u
+  i64.const 65535
+  i64.and
+  i64.const 32959
+  i64.ge_u
+  if
+   local.get $9
+   f64.const 127.99999995700433
+   f64.gt
+   if
+    local.get $2
+    call $~lib/util/math/oflowf
+    return
+   end
+   local.get $9
+   f64.const -150
+   f64.le
+   if
+    local.get $2
+    call $~lib/util/math/uflowf
+    return
+   end
+  end
+  local.get $9
+  local.get $2
+  call $~lib/util/math/exp2f_inline
+ )
+ (func $~lib/math/NativeMathf.pow (param $0 f32) (param $1 f32) (result f32)
+  local.get $1
+  f32.abs
+  f32.const 2
+  f32.le
+  if
+   local.get $1
+   f32.const 2
+   f32.eq
+   if
+    local.get $0
+    local.get $0
+    f32.mul
+    return
+   end
+   local.get $1
+   f32.const 0.5
+   f32.eq
+   if
+    local.get $0
+    f32.sqrt
+    f32.abs
+    f32.const inf
+    local.get $0
+    f32.const inf
+    f32.neg
+    f32.ne
+    select
+    return
+   end
+   local.get $1
+   f32.const -1
+   f32.eq
+   if
+    f32.const 1
+    local.get $0
+    f32.div
+    return
+   end
+   local.get $1
+   f32.const 1
+   f32.eq
+   if
+    local.get $0
+    return
+   end
+   local.get $1
+   f32.const 0
+   f32.eq
+   if
+    f32.const 1
+    return
+   end
   end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  local.get $1
+  call $~lib/util/math/powf_lut
   return
  )
  (func $std/math/test_powf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 f32) (param $4 i32) (result i32)
@@ -11422,7 +10884,7 @@
   if
    i32.const 0
    i32.const 13360
-   i32.const 1404
+   i32.const 1381
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -11480,51 +10942,52 @@
   f64.const 1
   f64.sub
  )
+ (func $~lib/math/NativeMathf.seedRandom (param $0 i64)
+  local.get $0
+  call $~lib/math/NativeMath.seedRandom
+ )
  (func $~lib/math/NativeMathf.random (result f32)
-  (local $0 i64)
+  (local $0 i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
   global.get $~lib/math/random_seeded
   i32.eqz
   if
    call $~lib/builtins/seed
    i64.reinterpret_f64
-   local.set $0
-   local.get $0
-   call $~lib/math/NativeMath.seedRandom
+   call $~lib/math/NativeMathf.seedRandom
   end
   global.get $~lib/math/random_state0_32
-  local.set $1
+  local.set $0
   global.get $~lib/math/random_state1_32
-  local.set $2
-  local.get $1
+  local.set $1
+  local.get $0
   i32.const -1640531525
   i32.mul
   i32.const 5
   i32.rotl
   i32.const 5
   i32.mul
-  local.set $3
-  local.get $2
-  local.get $1
-  i32.xor
   local.set $2
   local.get $1
+  local.get $0
+  i32.xor
+  local.set $1
+  local.get $0
   i32.const 26
   i32.rotl
-  local.get $2
+  local.get $1
   i32.xor
-  local.get $2
+  local.get $1
   i32.const 9
   i32.shl
   i32.xor
   global.set $~lib/math/random_state0_32
-  local.get $2
+  local.get $1
   i32.const 13
   i32.rotl
   global.set $~lib/math/random_state1_32
-  local.get $3
+  local.get $2
   i32.const 9
   i32.shr_u
   i32.const 127
@@ -11535,62 +10998,63 @@
   f32.const 1
   f32.sub
  )
- (func $std/math/test_round (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  (local $4 f64)
+ (func $~lib/math/NativeMath.round (param $0 f64) (result f64)
   local.get $0
-  local.set $4
-  local.get $4
   f64.const 0.5
   f64.add
   f64.floor
-  local.get $4
+  local.get $0
   f64.copysign
+ )
+ (func $std/math/test_round (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.round
   local.get $1
   local.get $2
   local.get $3
   call $std/math/check<f64>
  )
- (func $std/math/test_roundf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
-  (local $4 f32)
+ (func $~lib/math/NativeMathf.round (param $0 f32) (result f32)
   local.get $0
-  local.set $4
-  local.get $4
   f32.const 0.5
   f32.add
   f32.floor
-  local.get $4
+  local.get $0
   f32.copysign
+ )
+ (func $std/math/test_roundf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMathf.round
   local.get $1
   local.get $2
   local.get $3
   call $std/math/check<f32>
  )
- (func $std/math/test_sign (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  (local $4 f64)
-  block $~lib/math/NativeMath.sign|inlined.0 (result f64)
+ (func $~lib/math/NativeMath.sign (param $0 f64) (result f64)
+  i32.const 0
+  i32.const 0
+  i32.gt_s
+  drop
+  local.get $0
+  f64.const 0
+  f64.gt
+  if (result f64)
+   f64.const 1
+  else
    local.get $0
-   local.set $4
-   i32.const 0
-   i32.const 0
-   i32.gt_s
-   drop
-   local.get $4
    f64.const 0
-   f64.gt
+   f64.lt
    if (result f64)
-    f64.const 1
+    f64.const -1
    else
-    local.get $4
-    f64.const 0
-    f64.lt
-    if (result f64)
-     f64.const -1
-    else
-     local.get $4
-    end
+    local.get $0
    end
-   br $~lib/math/NativeMath.sign|inlined.0
   end
+  return
+ )
+ (func $std/math/test_sign (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.sign
   local.get $1
   local.get $2
   local.get $3
@@ -11612,32 +11076,31 @@
    i32.const 0
   end
  )
- (func $std/math/test_signf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
-  (local $4 f32)
-  block $~lib/math/NativeMathf.sign|inlined.0 (result f32)
+ (func $~lib/math/NativeMathf.sign (param $0 f32) (result f32)
+  i32.const 0
+  i32.const 0
+  i32.gt_s
+  drop
+  local.get $0
+  f32.const 0
+  f32.gt
+  if (result f32)
+   f32.const 1
+  else
    local.get $0
-   local.set $4
-   i32.const 0
-   i32.const 0
-   i32.gt_s
-   drop
-   local.get $4
    f32.const 0
-   f32.gt
+   f32.lt
    if (result f32)
-    f32.const 1
+    f32.const -1
    else
-    local.get $4
-    f32.const 0
-    f32.lt
-    if (result f32)
-     f32.const -1
-    else
-     local.get $4
-    end
+    local.get $0
    end
-   br $~lib/math/NativeMathf.sign|inlined.0
   end
+  return
+ )
+ (func $std/math/test_signf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMathf.sign
   local.get $1
   local.get $2
   local.get $3
@@ -12297,19 +11760,6 @@
   (local $4 i32)
   (local $5 f64)
   (local $6 f64)
-  (local $7 f64)
-  (local $8 f64)
-  (local $9 f64)
-  (local $10 f64)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i32)
-  (local $18 f64)
-  (local $19 f64)
   local.get $0
   i64.reinterpret_f64
   local.set $1
@@ -12317,100 +11767,30 @@
   i64.const 32
   i64.shr_u
   i32.wrap_i64
-  local.set $2
-  local.get $2
-  i32.const 31
-  i32.shr_u
-  local.set $3
-  local.get $2
-  i32.const 2147483647
-  i32.and
-  local.set $2
-  local.get $2
-  i32.const 1072243195
-  i32.le_u
-  if
-   local.get $2
-   i32.const 1045430272
-   i32.lt_u
-   if
-    local.get $0
-    return
-   end
-   block $~lib/math/sin_kern|inlined.1 (result f64)
-    local.get $0
-    local.set $6
-    f64.const 0
-    local.set $5
-    i32.const 0
-    local.set $4
-    local.get $6
-    local.get $6
-    f64.mul
-    local.set $7
-    local.get $7
-    local.get $7
-    f64.mul
-    local.set $8
-    f64.const 0.00833333333332249
-    local.get $7
-    f64.const -1.984126982985795e-04
-    local.get $7
-    f64.const 2.7557313707070068e-06
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $7
-    local.get $8
-    f64.mul
-    f64.const -2.5050760253406863e-08
-    local.get $7
-    f64.const 1.58969099521155e-10
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $9
-    local.get $7
-    local.get $6
-    f64.mul
-    local.set $10
-    local.get $4
-    i32.eqz
-    if
-     local.get $6
-     local.get $10
-     f64.const -0.16666666666666632
-     local.get $7
-     local.get $9
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     br $~lib/math/sin_kern|inlined.1
-    else
-     local.get $6
-     local.get $7
-     f64.const 0.5
-     local.get $5
-     f64.mul
-     local.get $10
-     local.get $9
-     f64.mul
-     f64.sub
-     f64.mul
-     local.get $5
-     f64.sub
-     local.get $10
-     f64.const -0.16666666666666632
-     f64.mul
-     f64.sub
-     f64.sub
-     br $~lib/math/sin_kern|inlined.1
-    end
-    unreachable
+  local.set $2
+  local.get $2
+  i32.const 31
+  i32.shr_u
+  local.set $3
+  local.get $2
+  i32.const 2147483647
+  i32.and
+  local.set $2
+  local.get $2
+  i32.const 1072243195
+  i32.le_u
+  if
+   local.get $2
+   i32.const 1045430272
+   i32.lt_u
+   if
+    local.get $0
+    return
    end
+   local.get $0
+   f64.const 0
+   i32.const 0
+   call $~lib/math/sin_kern
    return
   end
   local.get $2
@@ -12422,398 +11802,30 @@
    f64.sub
    return
   end
-  block $~lib/math/rempio2|inlined.1 (result i32)
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $11
-   local.get $3
-   local.set $4
-   local.get $11
-   i64.const 32
-   i64.shr_u
-   i32.wrap_i64
-   i32.const 2147483647
-   i32.and
-   local.set $12
-   i32.const 0
-   i32.const 1
-   i32.lt_s
-   drop
-   local.get $12
-   i32.const 1073928572
-   i32.lt_u
-   if
-    i32.const 1
-    local.set $13
-    local.get $4
-    i32.eqz
-    if
-     local.get $5
-     f64.const 1.5707963267341256
-     f64.sub
-     local.set $10
-     local.get $12
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $10
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $9
-      local.get $10
-      local.get $9
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $8
-     else
-      local.get $10
-      f64.const 6.077100506303966e-11
-      f64.sub
-      local.set $10
-      local.get $10
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $9
-      local.get $10
-      local.get $9
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $8
-     end
-    else
-     local.get $5
-     f64.const 1.5707963267341256
-     f64.add
-     local.set $10
-     local.get $12
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $10
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $9
-      local.get $10
-      local.get $9
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $8
-     else
-      local.get $10
-      f64.const 6.077100506303966e-11
-      f64.add
-      local.set $10
-      local.get $10
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $9
-      local.get $10
-      local.get $9
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $8
-     end
-     i32.const -1
-     local.set $13
-    end
-    local.get $9
-    global.set $~lib/math/rempio2_y0
-    local.get $8
-    global.set $~lib/math/rempio2_y1
-    local.get $13
-    br $~lib/math/rempio2|inlined.1
-   end
-   local.get $12
-   i32.const 1094263291
-   i32.lt_u
-   if
-    local.get $5
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.set $8
-    local.get $5
-    local.get $8
-    f64.const 1.5707963267341256
-    f64.mul
-    f64.sub
-    local.set $9
-    local.get $8
-    f64.const 6.077100506506192e-11
-    f64.mul
-    local.set $10
-    local.get $12
-    i32.const 20
-    i32.shr_u
-    local.set $13
-    local.get $9
-    local.get $10
-    f64.sub
-    local.set $7
-    local.get $7
-    i64.reinterpret_f64
-    i64.const 32
-    i64.shr_u
-    i32.wrap_i64
-    local.set $14
-    local.get $13
-    local.get $14
-    i32.const 20
-    i32.shr_u
-    i32.const 2047
-    i32.and
-    i32.sub
-    local.set $15
-    local.get $15
-    i32.const 16
-    i32.gt_u
-    if
-     local.get $9
-     local.set $6
-     local.get $8
-     f64.const 6.077100506303966e-11
-     f64.mul
-     local.set $10
-     local.get $6
-     local.get $10
-     f64.sub
-     local.set $9
-     local.get $8
-     f64.const 2.0222662487959506e-21
-     f64.mul
-     local.get $6
-     local.get $9
-     f64.sub
-     local.get $10
-     f64.sub
-     f64.sub
-     local.set $10
-     local.get $9
-     local.get $10
-     f64.sub
-     local.set $7
-     local.get $7
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     local.set $14
-     local.get $13
-     local.get $14
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     local.set $15
-     local.get $15
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $9
-      local.set $16
-      local.get $8
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.set $10
-      local.get $16
-      local.get $10
-      f64.sub
-      local.set $9
-      local.get $8
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $16
-      local.get $9
-      f64.sub
-      local.get $10
-      f64.sub
-      f64.sub
-      local.set $10
-      local.get $9
-      local.get $10
-      f64.sub
-      local.set $7
-     end
-    end
-    local.get $9
-    local.get $7
-    f64.sub
-    local.get $10
-    f64.sub
-    local.set $6
-    local.get $7
-    global.set $~lib/math/rempio2_y0
-    local.get $6
-    global.set $~lib/math/rempio2_y1
-    local.get $8
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.1
-   end
-   local.get $5
-   local.get $11
-   call $~lib/math/pio2_large_quot
-   local.set $15
-   i32.const 0
-   local.get $15
-   i32.sub
-   local.get $15
-   local.get $4
-   select
-  end
-  local.set $17
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/math/rempio2
+  local.set $4
   global.get $~lib/math/rempio2_y0
-  local.set $18
+  local.set $5
   global.get $~lib/math/rempio2_y1
-  local.set $19
-  local.get $17
+  local.set $6
+  local.get $4
   i32.const 1
   i32.and
   if (result f64)
-   local.get $18
-   local.set $8
-   local.get $19
-   local.set $16
-   local.get $8
-   local.get $8
-   f64.mul
-   local.set $5
-   local.get $5
-   local.get $5
-   f64.mul
-   local.set $6
    local.get $5
-   f64.const 0.0416666666666666
-   local.get $5
-   f64.const -0.001388888888887411
-   local.get $5
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $6
    local.get $6
-   f64.mul
-   f64.const -2.7557314351390663e-07
-   local.get $5
-   f64.const 2.087572321298175e-09
-   local.get $5
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.set $7
-   f64.const 0.5
+   call $~lib/math/cos_kern
+  else
    local.get $5
-   f64.mul
-   local.set $10
-   f64.const 1
-   local.get $10
-   f64.sub
-   local.set $6
-   local.get $6
-   f64.const 1
    local.get $6
-   f64.sub
-   local.get $10
-   f64.sub
-   local.get $5
-   local.get $7
-   f64.mul
-   local.get $8
-   local.get $16
-   f64.mul
-   f64.sub
-   f64.add
-   f64.add
-  else
-   block $~lib/math/sin_kern|inlined.2 (result f64)
-    local.get $18
-    local.set $16
-    local.get $19
-    local.set $9
-    i32.const 1
-    local.set $13
-    local.get $16
-    local.get $16
-    f64.mul
-    local.set $10
-    local.get $10
-    local.get $10
-    f64.mul
-    local.set $7
-    f64.const 0.00833333333332249
-    local.get $10
-    f64.const -1.984126982985795e-04
-    local.get $10
-    f64.const 2.7557313707070068e-06
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $10
-    local.get $7
-    f64.mul
-    f64.const -2.5050760253406863e-08
-    local.get $10
-    f64.const 1.58969099521155e-10
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $6
-    local.get $10
-    local.get $16
-    f64.mul
-    local.set $5
-    local.get $13
-    i32.eqz
-    if
-     local.get $16
-     local.get $5
-     f64.const -0.16666666666666632
-     local.get $10
-     local.get $6
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     br $~lib/math/sin_kern|inlined.2
-    else
-     local.get $16
-     local.get $10
-     f64.const 0.5
-     local.get $9
-     f64.mul
-     local.get $5
-     local.get $6
-     f64.mul
-     f64.sub
-     f64.mul
-     local.get $9
-     f64.sub
-     local.get $5
-     f64.const -0.16666666666666632
-     f64.mul
-     f64.sub
-     f64.sub
-     br $~lib/math/sin_kern|inlined.2
-    end
-    unreachable
-   end
+   i32.const 1
+   call $~lib/math/sin_kern
   end
   local.set $0
-  local.get $17
+  local.get $4
   i32.const 2
   i32.and
   if (result f64)
@@ -12850,30 +11862,9 @@
  (func $~lib/math/NativeMathf.sin (param $0 f32) (result f32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 f64)
+  (local $3 i32)
   (local $4 f64)
-  (local $5 f64)
-  (local $6 f64)
-  (local $7 f64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 f32)
-  (local $11 i32)
-  (local $12 f32)
-  (local $13 i32)
-  (local $14 i64)
-  (local $15 i32)
-  (local $16 i64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i32)
-  (local $24 i32)
-  (local $25 f64)
-  (local $26 f32)
+  (local $5 f32)
   local.get $0
   i32.reinterpret_f32
   local.set $1
@@ -12898,41 +11889,7 @@
    end
    local.get $0
    f64.promote_f32
-   local.set $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.set $4
-   local.get $4
-   local.get $4
-   f64.mul
-   local.set $5
-   f64.const -1.9839334836096632e-04
-   local.get $4
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   local.set $6
-   local.get $4
-   local.get $3
-   f64.mul
-   local.set $7
-   local.get $3
-   local.get $7
-   f64.const -0.16666666641626524
-   local.get $4
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $7
-   local.get $5
-   f64.mul
-   local.get $6
-   f64.mul
-   f64.add
-   f32.demote_f64
+   call $~lib/math/sin_kernf
    return
   end
   i32.const 0
@@ -12953,76 +11910,14 @@
      f64.promote_f32
      f64.const 1.5707963267948966
      f64.add
-     local.set $3
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $7
-     local.get $7
-     local.get $7
-     f64.mul
-     local.set $6
-     f64.const -0.001388676377460993
-     local.get $7
-     f64.const 2.439044879627741e-05
-     f64.mul
-     f64.add
-     local.set $5
-     f32.const 1
-     f64.promote_f32
-     local.get $7
-     f64.const -0.499999997251031
-     f64.mul
-     f64.add
-     local.get $6
-     f64.const 0.04166662332373906
-     f64.mul
-     f64.add
-     local.get $6
-     local.get $7
-     f64.mul
-     local.get $5
-     f64.mul
-     f64.add
-     f32.demote_f64
+     call $~lib/math/cos_kernf
      f32.neg
     else
      local.get $0
      f64.promote_f32
      f64.const 1.5707963267948966
      f64.sub
-     local.set $4
-     local.get $4
-     local.get $4
-     f64.mul
-     local.set $5
-     local.get $5
-     local.get $5
-     f64.mul
-     local.set $6
-     f64.const -0.001388676377460993
-     local.get $5
-     f64.const 2.439044879627741e-05
-     f64.mul
-     f64.add
-     local.set $7
-     f32.const 1
-     f64.promote_f32
-     local.get $5
-     f64.const -0.499999997251031
-     f64.mul
-     f64.add
-     local.get $6
-     f64.const 0.04166662332373906
-     f64.mul
-     f64.add
-     local.get $6
-     local.get $5
-     f64.mul
-     local.get $7
-     f64.mul
-     f64.add
-     f32.demote_f64
+     call $~lib/math/cos_kernf
     end
     return
    end
@@ -13039,126 +11934,30 @@
     f64.sub
    end
    f64.neg
-   local.set $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.set $7
-   local.get $7
-   local.get $7
-   f64.mul
-   local.set $6
-   f64.const -1.9839334836096632e-04
-   local.get $7
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   local.set $5
-   local.get $7
-   local.get $3
-   f64.mul
-   local.set $4
-   local.get $3
-   local.get $4
-   f64.const -0.16666666641626524
-   local.get $7
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $4
-   local.get $6
-   f64.mul
-   local.get $5
-   f64.mul
-   f64.add
-   f32.demote_f64
+   call $~lib/math/sin_kernf
    return
   end
   local.get $1
   i32.const 1088565717
   i32.le_u
-  if
-   local.get $1
-   i32.const 1085271519
-   i32.le_u
-   if
-    local.get $2
-    if (result f32)
-     local.get $0
-     f64.promote_f32
-     f64.const 4.71238898038469
-     f64.add
-     local.set $3
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $4
-     local.get $4
-     local.get $4
-     f64.mul
-     local.set $5
-     f64.const -0.001388676377460993
-     local.get $4
-     f64.const 2.439044879627741e-05
-     f64.mul
-     f64.add
-     local.set $6
-     f32.const 1
-     f64.promote_f32
-     local.get $4
-     f64.const -0.499999997251031
-     f64.mul
-     f64.add
-     local.get $5
-     f64.const 0.04166662332373906
-     f64.mul
-     f64.add
-     local.get $5
-     local.get $4
-     f64.mul
-     local.get $6
-     f64.mul
-     f64.add
-     f32.demote_f64
-    else
-     local.get $0
-     f64.promote_f32
-     f64.const 4.71238898038469
-     f64.sub
-     local.set $7
-     local.get $7
-     local.get $7
-     f64.mul
-     local.set $6
-     local.get $6
-     local.get $6
-     f64.mul
-     local.set $5
-     f64.const -0.001388676377460993
-     local.get $6
-     f64.const 2.439044879627741e-05
-     f64.mul
-     f64.add
-     local.set $4
-     f32.const 1
+  if
+   local.get $1
+   i32.const 1085271519
+   i32.le_u
+   if
+    local.get $2
+    if (result f32)
+     local.get $0
      f64.promote_f32
-     local.get $6
-     f64.const -0.499999997251031
-     f64.mul
-     f64.add
-     local.get $5
-     f64.const 0.04166662332373906
-     f64.mul
-     f64.add
-     local.get $5
-     local.get $6
-     f64.mul
-     local.get $4
-     f64.mul
+     f64.const 4.71238898038469
      f64.add
-     f32.demote_f64
+     call $~lib/math/cos_kernf
+    else
+     local.get $0
+     f64.promote_f32
+     f64.const 4.71238898038469
+     f64.sub
+     call $~lib/math/cos_kernf
      f32.neg
     end
     return
@@ -13175,41 +11974,7 @@
     f64.const 6.283185307179586
     f64.sub
    end
-   local.set $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.set $4
-   local.get $4
-   local.get $4
-   f64.mul
-   local.set $5
-   f64.const -1.9839334836096632e-04
-   local.get $4
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   local.set $6
-   local.get $4
-   local.get $3
-   f64.mul
-   local.set $7
-   local.get $3
-   local.get $7
-   f64.const -0.16666666641626524
-   local.get $4
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $7
-   local.get $5
-   f64.mul
-   local.get $6
-   f64.mul
-   f64.add
-   f32.demote_f64
+   call $~lib/math/sin_kernf
    return
   end
   local.get $1
@@ -13221,240 +11986,32 @@
    f32.sub
    return
   end
-  block $~lib/math/rempio2f|inlined.1 (result i32)
-   local.get $0
-   local.set $10
-   local.get $1
-   local.set $9
-   local.get $2
-   local.set $8
-   local.get $9
-   i32.const 1305022427
-   i32.lt_u
-   if
-    local.get $10
-    f64.promote_f32
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.set $7
-    local.get $10
-    f64.promote_f32
-    local.get $7
-    f64.const 1.5707963109016418
-    f64.mul
-    f64.sub
-    local.get $7
-    f64.const 1.5893254773528196e-08
-    f64.mul
-    f64.sub
-    global.set $~lib/math/rempio2f_y
-    local.get $7
-    i32.trunc_f64_s
-    br $~lib/math/rempio2f|inlined.1
-   end
-   local.get $10
-   local.set $12
-   local.get $9
-   local.set $11
-   local.get $11
-   i32.const 23
-   i32.shr_s
-   i32.const 152
-   i32.sub
-   local.set $13
-   local.get $13
-   i32.const 63
-   i32.and
-   i64.extend_i32_s
-   local.set $14
-   i32.const 4600
-   local.get $13
-   i32.const 6
-   i32.shr_s
-   i32.const 3
-   i32.shl
-   i32.add
-   local.set $15
-   local.get $15
-   i64.load
-   local.set $16
-   local.get $15
-   i64.load offset=8
-   local.set $17
-   local.get $14
-   i64.const 32
-   i64.gt_u
-   if
-    local.get $15
-    i64.load offset=16
-    local.set $19
-    local.get $19
-    i64.const 96
-    local.get $14
-    i64.sub
-    i64.shr_u
-    local.set $18
-    local.get $18
-    local.get $17
-    local.get $14
-    i64.const 32
-    i64.sub
-    i64.shl
-    i64.or
-    local.set $18
-   else
-    local.get $17
-    i64.const 32
-    local.get $14
-    i64.sub
-    i64.shr_u
-    local.set $18
-   end
-   local.get $17
-   i64.const 64
-   local.get $14
-   i64.sub
-   i64.shr_u
-   local.get $16
-   local.get $14
-   i64.shl
-   i64.or
-   local.set $19
-   local.get $11
-   i32.const 8388607
-   i32.and
-   i32.const 8388608
-   i32.or
-   i64.extend_i32_s
-   local.set $20
-   local.get $20
-   local.get $19
-   i64.mul
-   local.get $20
-   local.get $18
-   i64.mul
-   i64.const 32
-   i64.shr_u
-   i64.add
-   local.set $21
-   local.get $21
-   i64.const 2
-   i64.shl
-   local.set $22
-   local.get $21
-   i64.const 62
-   i64.shr_u
-   local.get $22
-   i64.const 63
-   i64.shr_u
-   i64.add
-   i32.wrap_i64
-   local.set $23
-   f64.const 8.515303950216386e-20
-   local.get $12
-   f64.promote_f32
-   f64.copysign
-   local.get $22
-   f64.convert_i64_s
-   f64.mul
-   global.set $~lib/math/rempio2f_y
-   local.get $23
-   local.set $23
-   i32.const 0
-   local.get $23
-   i32.sub
-   local.get $23
-   local.get $8
-   select
-  end
-  local.set $24
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/math/rempio2f
+  local.set $3
   global.get $~lib/math/rempio2f_y
-  local.set $25
-  local.get $24
+  local.set $4
+  local.get $3
   i32.const 1
   i32.and
   if (result f32)
-   local.get $25
-   local.set $3
-   local.get $3
-   local.get $3
-   f64.mul
-   local.set $7
-   local.get $7
-   local.get $7
-   f64.mul
-   local.set $6
-   f64.const -0.001388676377460993
-   local.get $7
-   f64.const 2.439044879627741e-05
-   f64.mul
-   f64.add
-   local.set $5
-   f32.const 1
-   f64.promote_f32
-   local.get $7
-   f64.const -0.499999997251031
-   f64.mul
-   f64.add
-   local.get $6
-   f64.const 0.04166662332373906
-   f64.mul
-   f64.add
-   local.get $6
-   local.get $7
-   f64.mul
-   local.get $5
-   f64.mul
-   f64.add
-   f32.demote_f64
-  else
-   local.get $25
-   local.set $4
-   local.get $4
-   local.get $4
-   f64.mul
-   local.set $5
-   local.get $5
-   local.get $5
-   f64.mul
-   local.set $6
-   f64.const -1.9839334836096632e-04
-   local.get $5
-   f64.const 2.718311493989822e-06
-   f64.mul
-   f64.add
-   local.set $7
-   local.get $5
    local.get $4
-   f64.mul
-   local.set $3
+   call $~lib/math/cos_kernf
+  else
    local.get $4
-   local.get $3
-   f64.const -0.16666666641626524
-   local.get $5
-   f64.const 0.008333329385889463
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $3
-   local.get $6
-   f64.mul
-   local.get $7
-   f64.mul
-   f64.add
-   f32.demote_f64
+   call $~lib/math/sin_kernf
   end
-  local.set $26
-  local.get $24
+  local.set $5
+  local.get $3
   i32.const 2
   i32.and
   if (result f32)
-   local.get $26
+   local.get $5
    f32.neg
   else
-   local.get $26
+   local.get $5
   end
  )
  (func $std/math/test_sinf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
@@ -13471,8 +12028,6 @@
   (local $3 i32)
   (local $4 f64)
   (local $5 f64)
-  (local $6 f64)
-  (local $7 f64)
   local.get $0
   i64.reinterpret_f64
   i64.const 9223372036854775807
@@ -13542,27 +12097,7 @@
   local.get $5
   f64.mul
   local.get $2
-  local.set $6
-  i32.const 1023
-  i32.const 2043
-  i32.const 2
-  i32.div_u
-  i32.add
-  i32.const 20
-  i32.shl
-  i64.extend_i32_u
-  i64.const 32
-  i64.shl
-  f64.reinterpret_i64
-  local.set $7
-  local.get $6
-  f64.const 1416.0996898839683
-  f64.sub
-  call $~lib/math/NativeMath.exp
-  local.get $7
-  f64.mul
-  local.get $7
-  f64.mul
+  call $~lib/math/expo2
   f64.mul
   local.set $4
   local.get $4
@@ -13596,8 +12131,6 @@
   (local $2 f32)
   (local $3 f32)
   (local $4 f32)
-  (local $5 f32)
-  (local $6 f32)
   local.get $0
   i32.reinterpret_f32
   i32.const 2147483647
@@ -13662,24 +12195,7 @@
   local.get $4
   f32.mul
   local.get $2
-  local.set $5
-  i32.const 127
-  i32.const 235
-  i32.const 1
-  i32.shr_u
-  i32.add
-  i32.const 23
-  i32.shl
-  f32.reinterpret_i32
-  local.set $6
-  local.get $5
-  f32.const 162.88958740234375
-  f32.sub
-  call $~lib/math/NativeMathf.exp
-  local.get $6
-  f32.mul
-  local.get $6
-  f32.mul
+  call $~lib/math/expo2f
   f32.mul
   local.set $3
   local.get $3
@@ -13692,12 +12208,13 @@
   local.get $3
   call $std/math/check<f32>
  )
- (func $std/math/test_sqrt (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  (local $4 f64)
+ (func $~lib/math/NativeMath.sqrt (param $0 f64) (result f64)
   local.get $0
-  local.set $4
-  local.get $4
   f64.sqrt
+ )
+ (func $std/math/test_sqrt (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.sqrt
   local.get $1
   local.get $2
   local.get $3
@@ -13719,12 +12236,13 @@
    i32.const 0
   end
  )
- (func $std/math/test_sqrtf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
-  (local $4 f32)
+ (func $~lib/math/NativeMathf.sqrt (param $0 f32) (result f32)
   local.get $0
-  local.set $4
-  local.get $4
   f32.sqrt
+ )
+ (func $std/math/test_sqrtf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMathf.sqrt
   local.get $1
   local.get $2
   local.get $3
@@ -13948,19 +12466,6 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i64)
-  (local $6 f64)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 f64)
-  (local $10 f64)
-  (local $11 f64)
-  (local $12 f64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 f64)
-  (local $16 f64)
-  (local $17 i32)
   local.get $0
   i64.reinterpret_f64
   local.set $1
@@ -14003,255 +12508,15 @@
    f64.sub
    return
   end
-  block $~lib/math/rempio2|inlined.2 (result i32)
-   local.get $0
-   local.set $6
-   local.get $1
-   local.set $5
-   local.get $3
-   local.set $4
-   local.get $5
-   i64.const 32
-   i64.shr_u
-   i32.wrap_i64
-   i32.const 2147483647
-   i32.and
-   local.set $7
-   i32.const 0
-   i32.const 1
-   i32.lt_s
-   drop
-   local.get $7
-   i32.const 1073928572
-   i32.lt_u
-   if
-    i32.const 1
-    local.set $8
-    local.get $4
-    i32.eqz
-    if
-     local.get $6
-     f64.const 1.5707963267341256
-     f64.sub
-     local.set $9
-     local.get $7
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $9
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $10
-      local.get $9
-      local.get $10
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $11
-     else
-      local.get $9
-      f64.const 6.077100506303966e-11
-      f64.sub
-      local.set $9
-      local.get $9
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $10
-      local.get $9
-      local.get $10
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $11
-     end
-    else
-     local.get $6
-     f64.const 1.5707963267341256
-     f64.add
-     local.set $9
-     local.get $7
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $9
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $10
-      local.get $9
-      local.get $10
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $11
-     else
-      local.get $9
-      f64.const 6.077100506303966e-11
-      f64.add
-      local.set $9
-      local.get $9
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $10
-      local.get $9
-      local.get $10
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $11
-     end
-     i32.const -1
-     local.set $8
-    end
-    local.get $10
-    global.set $~lib/math/rempio2_y0
-    local.get $11
-    global.set $~lib/math/rempio2_y1
-    local.get $8
-    br $~lib/math/rempio2|inlined.2
-   end
-   local.get $7
-   i32.const 1094263291
-   i32.lt_u
-   if
-    local.get $6
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.set $11
-    local.get $6
-    local.get $11
-    f64.const 1.5707963267341256
-    f64.mul
-    f64.sub
-    local.set $10
-    local.get $11
-    f64.const 6.077100506506192e-11
-    f64.mul
-    local.set $9
-    local.get $7
-    i32.const 20
-    i32.shr_u
-    local.set $8
-    local.get $10
-    local.get $9
-    f64.sub
-    local.set $12
-    local.get $12
-    i64.reinterpret_f64
-    i64.const 32
-    i64.shr_u
-    i32.wrap_i64
-    local.set $13
-    local.get $8
-    local.get $13
-    i32.const 20
-    i32.shr_u
-    i32.const 2047
-    i32.and
-    i32.sub
-    local.set $14
-    local.get $14
-    i32.const 16
-    i32.gt_u
-    if
-     local.get $10
-     local.set $15
-     local.get $11
-     f64.const 6.077100506303966e-11
-     f64.mul
-     local.set $9
-     local.get $15
-     local.get $9
-     f64.sub
-     local.set $10
-     local.get $11
-     f64.const 2.0222662487959506e-21
-     f64.mul
-     local.get $15
-     local.get $10
-     f64.sub
-     local.get $9
-     f64.sub
-     f64.sub
-     local.set $9
-     local.get $10
-     local.get $9
-     f64.sub
-     local.set $12
-     local.get $12
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     local.set $13
-     local.get $8
-     local.get $13
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     local.set $14
-     local.get $14
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $10
-      local.set $16
-      local.get $11
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.set $9
-      local.get $16
-      local.get $9
-      f64.sub
-      local.set $10
-      local.get $11
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $16
-      local.get $10
-      f64.sub
-      local.get $9
-      f64.sub
-      f64.sub
-      local.set $9
-      local.get $10
-      local.get $9
-      f64.sub
-      local.set $12
-     end
-    end
-    local.get $10
-    local.get $12
-    f64.sub
-    local.get $9
-    f64.sub
-    local.set $15
-    local.get $12
-    global.set $~lib/math/rempio2_y0
-    local.get $15
-    global.set $~lib/math/rempio2_y1
-    local.get $11
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.2
-   end
-   local.get $6
-   local.get $5
-   call $~lib/math/pio2_large_quot
-   local.set $14
-   i32.const 0
-   local.get $14
-   i32.sub
-   local.get $14
-   local.get $4
-   select
-  end
-  local.set $17
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/math/rempio2
+  local.set $4
   global.get $~lib/math/rempio2_y0
   global.get $~lib/math/rempio2_y1
   i32.const 1
-  local.get $17
+  local.get $4
   i32.const 1
   i32.and
   i32.const 1
@@ -14261,56 +12526,97 @@
  )
  (func $std/math/test_tan (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
   local.get $0
-  call $~lib/math/NativeMath.tan
-  local.get $1
+  call $~lib/math/NativeMath.tan
+  local.get $1
+  local.get $2
+  local.get $3
+  call $std/math/check<f64>
+  if (result i32)
+   global.get $std/math/js
+   i32.eqz
+   if (result i32)
+    i32.const 1
+   else
+    local.get $0
+    call $~lib/bindings/Math/tan
+    local.get $1
+    local.get $2
+    local.get $3
+    call $std/math/check<f64>
+   end
+  else
+   i32.const 0
+  end
+ )
+ (func $~lib/math/tan_kernf (param $0 f64) (param $1 i32) (result f32)
+  (local $2 f64)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  local.get $0
+  local.get $0
+  f64.mul
+  local.set $2
+  f64.const 0.002974357433599673
+  local.get $2
+  f64.const 0.009465647849436732
+  f64.mul
+  f64.add
+  local.set $3
+  f64.const 0.05338123784456704
+  local.get $2
+  f64.const 0.024528318116654728
+  f64.mul
+  f64.add
+  local.set $4
+  local.get $2
+  local.get $2
+  f64.mul
+  local.set $5
+  local.get $2
+  local.get $0
+  f64.mul
+  local.set $6
+  f64.const 0.3333313950307914
   local.get $2
+  f64.const 0.13339200271297674
+  f64.mul
+  f64.add
+  local.set $7
+  local.get $0
+  local.get $6
+  local.get $7
+  f64.mul
+  f64.add
+  local.get $6
+  local.get $5
+  f64.mul
+  local.get $4
+  local.get $5
   local.get $3
-  call $std/math/check<f64>
-  if (result i32)
-   global.get $std/math/js
-   i32.eqz
-   if (result i32)
-    i32.const 1
-   else
-    local.get $0
-    call $~lib/bindings/Math/tan
-    local.get $1
-    local.get $2
-    local.get $3
-    call $std/math/check<f64>
-   end
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $3
+  local.get $1
+  if (result f64)
+   f32.const -1
+   f64.promote_f32
+   local.get $3
+   f64.div
   else
-   i32.const 0
+   local.get $3
   end
+  f32.demote_f64
  )
  (func $~lib/math/NativeMathf.tan (param $0 f32) (result f32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 f64)
-  (local $5 f64)
-  (local $6 f64)
-  (local $7 f64)
-  (local $8 f64)
-  (local $9 f64)
-  (local $10 f64)
-  (local $11 i32)
-  (local $12 f32)
-  (local $13 i32)
-  (local $14 f32)
-  (local $15 i32)
-  (local $16 i64)
-  (local $17 i32)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 f64)
   local.get $0
   i32.reinterpret_f32
   local.set $1
@@ -14335,65 +12641,8 @@
    end
    local.get $0
    f64.promote_f32
-   local.set $4
    i32.const 0
-   local.set $3
-   local.get $4
-   local.get $4
-   f64.mul
-   local.set $5
-   f64.const 0.002974357433599673
-   local.get $5
-   f64.const 0.009465647849436732
-   f64.mul
-   f64.add
-   local.set $6
-   f64.const 0.05338123784456704
-   local.get $5
-   f64.const 0.024528318116654728
-   f64.mul
-   f64.add
-   local.set $7
-   local.get $5
-   local.get $5
-   f64.mul
-   local.set $8
-   local.get $5
-   local.get $4
-   f64.mul
-   local.set $9
-   f64.const 0.3333313950307914
-   local.get $5
-   f64.const 0.13339200271297674
-   f64.mul
-   f64.add
-   local.set $10
-   local.get $4
-   local.get $9
-   local.get $10
-   f64.mul
-   f64.add
-   local.get $9
-   local.get $8
-   f64.mul
-   local.get $7
-   local.get $8
-   local.get $6
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.set $6
-   local.get $3
-   if (result f64)
-    f32.const -1
-    f64.promote_f32
-    local.get $6
-    f64.div
-   else
-    local.get $6
-   end
-   f32.demote_f64
+   call $~lib/math/tan_kernf
    return
   end
   i32.const 0
@@ -14420,65 +12669,8 @@
      f64.const 1.5707963267948966
      f64.sub
     end
-    local.set $4
     i32.const 1
-    local.set $3
-    local.get $4
-    local.get $4
-    f64.mul
-    local.set $10
-    f64.const 0.002974357433599673
-    local.get $10
-    f64.const 0.009465647849436732
-    f64.mul
-    f64.add
-    local.set $9
-    f64.const 0.05338123784456704
-    local.get $10
-    f64.const 0.024528318116654728
-    f64.mul
-    f64.add
-    local.set $8
-    local.get $10
-    local.get $10
-    f64.mul
-    local.set $7
-    local.get $10
-    local.get $4
-    f64.mul
-    local.set $6
-    f64.const 0.3333313950307914
-    local.get $10
-    f64.const 0.13339200271297674
-    f64.mul
-    f64.add
-    local.set $5
-    local.get $4
-    local.get $6
-    local.get $5
-    f64.mul
-    f64.add
-    local.get $6
-    local.get $7
-    f64.mul
-    local.get $8
-    local.get $7
-    local.get $9
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $9
-    local.get $3
-    if (result f64)
-     f32.const -1
-     f64.promote_f32
-     local.get $9
-     f64.div
-    else
-     local.get $9
-    end
-    f32.demote_f64
+    call $~lib/math/tan_kernf
     return
    else
     local.get $2
@@ -14493,65 +12685,8 @@
      f64.const 3.141592653589793
      f64.sub
     end
-    local.set $4
     i32.const 0
-    local.set $3
-    local.get $4
-    local.get $4
-    f64.mul
-    local.set $5
-    f64.const 0.002974357433599673
-    local.get $5
-    f64.const 0.009465647849436732
-    f64.mul
-    f64.add
-    local.set $6
-    f64.const 0.05338123784456704
-    local.get $5
-    f64.const 0.024528318116654728
-    f64.mul
-    f64.add
-    local.set $7
-    local.get $5
-    local.get $5
-    f64.mul
-    local.set $8
-    local.get $5
-    local.get $4
-    f64.mul
-    local.set $9
-    f64.const 0.3333313950307914
-    local.get $5
-    f64.const 0.13339200271297674
-    f64.mul
-    f64.add
-    local.set $10
-    local.get $4
-    local.get $9
-    local.get $10
-    f64.mul
-    f64.add
-    local.get $9
-    local.get $8
-    f64.mul
-    local.get $7
-    local.get $8
-    local.get $6
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $6
-    local.get $3
-    if (result f64)
-     f32.const -1
-     f64.promote_f32
-     local.get $6
-     f64.div
-    else
-     local.get $6
-    end
-    f32.demote_f64
+    call $~lib/math/tan_kernf
     return
    end
    unreachable
@@ -14576,65 +12711,8 @@
      f64.const 4.71238898038469
      f64.sub
     end
-    local.set $4
     i32.const 1
-    local.set $3
-    local.get $4
-    local.get $4
-    f64.mul
-    local.set $10
-    f64.const 0.002974357433599673
-    local.get $10
-    f64.const 0.009465647849436732
-    f64.mul
-    f64.add
-    local.set $9
-    f64.const 0.05338123784456704
-    local.get $10
-    f64.const 0.024528318116654728
-    f64.mul
-    f64.add
-    local.set $8
-    local.get $10
-    local.get $10
-    f64.mul
-    local.set $7
-    local.get $10
-    local.get $4
-    f64.mul
-    local.set $6
-    f64.const 0.3333313950307914
-    local.get $10
-    f64.const 0.13339200271297674
-    f64.mul
-    f64.add
-    local.set $5
-    local.get $4
-    local.get $6
-    local.get $5
-    f64.mul
-    f64.add
-    local.get $6
-    local.get $7
-    f64.mul
-    local.get $8
-    local.get $7
-    local.get $9
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $9
-    local.get $3
-    if (result f64)
-     f32.const -1
-     f64.promote_f32
-     local.get $9
-     f64.div
-    else
-     local.get $9
-    end
-    f32.demote_f64
+    call $~lib/math/tan_kernf
     return
    else
     local.get $2
@@ -14649,65 +12727,8 @@
      f64.const 6.283185307179586
      f64.sub
     end
-    local.set $4
     i32.const 0
-    local.set $3
-    local.get $4
-    local.get $4
-    f64.mul
-    local.set $5
-    f64.const 0.002974357433599673
-    local.get $5
-    f64.const 0.009465647849436732
-    f64.mul
-    f64.add
-    local.set $6
-    f64.const 0.05338123784456704
-    local.get $5
-    f64.const 0.024528318116654728
-    f64.mul
-    f64.add
-    local.set $7
-    local.get $5
-    local.get $5
-    f64.mul
-    local.set $8
-    local.get $5
-    local.get $4
-    f64.mul
-    local.set $9
-    f64.const 0.3333313950307914
-    local.get $5
-    f64.const 0.13339200271297674
-    f64.mul
-    f64.add
-    local.set $10
-    local.get $4
-    local.get $9
-    local.get $10
-    f64.mul
-    f64.add
-    local.get $9
-    local.get $8
-    f64.mul
-    local.get $7
-    local.get $8
-    local.get $6
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $6
-    local.get $3
-    if (result f64)
-     f32.const -1
-     f64.promote_f32
-     local.get $6
-     f64.div
-    else
-     local.get $6
-    end
-    f32.demote_f64
+    call $~lib/math/tan_kernf
     return
    end
    unreachable
@@ -14721,218 +12742,18 @@
    f32.sub
    return
   end
-  block $~lib/math/rempio2f|inlined.2 (result i32)
-   local.get $0
-   local.set $12
-   local.get $1
-   local.set $11
-   local.get $2
-   local.set $3
-   local.get $11
-   i32.const 1305022427
-   i32.lt_u
-   if
-    local.get $12
-    f64.promote_f32
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.set $10
-    local.get $12
-    f64.promote_f32
-    local.get $10
-    f64.const 1.5707963109016418
-    f64.mul
-    f64.sub
-    local.get $10
-    f64.const 1.5893254773528196e-08
-    f64.mul
-    f64.sub
-    global.set $~lib/math/rempio2f_y
-    local.get $10
-    i32.trunc_f64_s
-    br $~lib/math/rempio2f|inlined.2
-   end
-   local.get $12
-   local.set $14
-   local.get $11
-   local.set $13
-   local.get $13
-   i32.const 23
-   i32.shr_s
-   i32.const 152
-   i32.sub
-   local.set $15
-   local.get $15
-   i32.const 63
-   i32.and
-   i64.extend_i32_s
-   local.set $16
-   i32.const 4600
-   local.get $15
-   i32.const 6
-   i32.shr_s
-   i32.const 3
-   i32.shl
-   i32.add
-   local.set $17
-   local.get $17
-   i64.load
-   local.set $18
-   local.get $17
-   i64.load offset=8
-   local.set $19
-   local.get $16
-   i64.const 32
-   i64.gt_u
-   if
-    local.get $17
-    i64.load offset=16
-    local.set $21
-    local.get $21
-    i64.const 96
-    local.get $16
-    i64.sub
-    i64.shr_u
-    local.set $20
-    local.get $20
-    local.get $19
-    local.get $16
-    i64.const 32
-    i64.sub
-    i64.shl
-    i64.or
-    local.set $20
-   else
-    local.get $19
-    i64.const 32
-    local.get $16
-    i64.sub
-    i64.shr_u
-    local.set $20
-   end
-   local.get $19
-   i64.const 64
-   local.get $16
-   i64.sub
-   i64.shr_u
-   local.get $18
-   local.get $16
-   i64.shl
-   i64.or
-   local.set $21
-   local.get $13
-   i32.const 8388607
-   i32.and
-   i32.const 8388608
-   i32.or
-   i64.extend_i32_s
-   local.set $22
-   local.get $22
-   local.get $21
-   i64.mul
-   local.get $22
-   local.get $20
-   i64.mul
-   i64.const 32
-   i64.shr_u
-   i64.add
-   local.set $23
-   local.get $23
-   i64.const 2
-   i64.shl
-   local.set $24
-   local.get $23
-   i64.const 62
-   i64.shr_u
-   local.get $24
-   i64.const 63
-   i64.shr_u
-   i64.add
-   i32.wrap_i64
-   local.set $25
-   f64.const 8.515303950216386e-20
-   local.get $14
-   f64.promote_f32
-   f64.copysign
-   local.get $24
-   f64.convert_i64_s
-   f64.mul
-   global.set $~lib/math/rempio2f_y
-   local.get $25
-   local.set $25
-   i32.const 0
-   local.get $25
-   i32.sub
-   local.get $25
-   local.get $3
-   select
-  end
-  local.set $26
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/math/rempio2f
+  local.set $3
   global.get $~lib/math/rempio2f_y
-  local.set $27
-  local.get $27
   local.set $4
-  local.get $26
+  local.get $4
+  local.get $3
   i32.const 1
   i32.and
-  local.set $13
-  local.get $4
-  local.get $4
-  f64.mul
-  local.set $10
-  f64.const 0.002974357433599673
-  local.get $10
-  f64.const 0.009465647849436732
-  f64.mul
-  f64.add
-  local.set $9
-  f64.const 0.05338123784456704
-  local.get $10
-  f64.const 0.024528318116654728
-  f64.mul
-  f64.add
-  local.set $8
-  local.get $10
-  local.get $10
-  f64.mul
-  local.set $7
-  local.get $10
-  local.get $4
-  f64.mul
-  local.set $6
-  f64.const 0.3333313950307914
-  local.get $10
-  f64.const 0.13339200271297674
-  f64.mul
-  f64.add
-  local.set $5
-  local.get $4
-  local.get $6
-  local.get $5
-  f64.mul
-  f64.add
-  local.get $6
-  local.get $7
-  f64.mul
-  local.get $8
-  local.get $7
-  local.get $9
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  local.set $9
-  local.get $13
-  if (result f64)
-   f32.const -1
-   f64.promote_f32
-   local.get $9
-   f64.div
-  else
-   local.get $9
-  end
-  f32.demote_f64
+  call $~lib/math/tan_kernf
  )
  (func $std/math/test_tanf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
   local.get $0
@@ -15152,12 +12973,13 @@
   local.get $3
   call $std/math/check<f32>
  )
- (func $std/math/test_trunc (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
-  (local $4 f64)
+ (func $~lib/math/NativeMath.trunc (param $0 f64) (result f64)
   local.get $0
-  local.set $4
-  local.get $4
   f64.trunc
+ )
+ (func $std/math/test_trunc (param $0 f64) (param $1 f64) (param $2 f64) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.trunc
   local.get $1
   local.get $2
   local.get $3
@@ -15179,12 +13001,13 @@
    i32.const 0
   end
  )
- (func $std/math/test_truncf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
-  (local $4 f32)
+ (func $~lib/math/NativeMathf.trunc (param $0 f32) (result f32)
   local.get $0
-  local.set $4
-  local.get $4
   f32.trunc
+ )
+ (func $std/math/test_truncf (param $0 f32) (param $1 f32) (param $2 f32) (param $3 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMathf.trunc
   local.get $1
   local.get $2
   local.get $3
@@ -15194,26 +13017,14 @@
   (local $1 i64)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
+  (local $4 f64)
+  (local $5 i32)
   (local $6 f64)
   (local $7 f64)
   (local $8 f64)
   (local $9 f64)
   (local $10 f64)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i32)
-  (local $18 f64)
-  (local $19 f64)
-  (local $20 f64)
-  (local $21 f64)
-  (local $22 f64)
-  (local $23 f64)
+  (local $11 f64)
   local.get $0
   i64.reinterpret_f64
   local.set $1
@@ -15244,142 +13055,14 @@
     global.set $~lib/math/NativeMath.sincos_cos
     return
    end
-   block $~lib/math/sin_kern|inlined.3 (result f64)
-    local.get $0
-    local.set $6
-    f64.const 0
-    local.set $5
-    i32.const 0
-    local.set $4
-    local.get $6
-    local.get $6
-    f64.mul
-    local.set $7
-    local.get $7
-    local.get $7
-    f64.mul
-    local.set $8
-    f64.const 0.00833333333332249
-    local.get $7
-    f64.const -1.984126982985795e-04
-    local.get $7
-    f64.const 2.7557313707070068e-06
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $7
-    local.get $8
-    f64.mul
-    f64.const -2.5050760253406863e-08
-    local.get $7
-    f64.const 1.58969099521155e-10
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $9
-    local.get $7
-    local.get $6
-    f64.mul
-    local.set $10
-    local.get $4
-    i32.eqz
-    if
-     local.get $6
-     local.get $10
-     f64.const -0.16666666666666632
-     local.get $7
-     local.get $9
-     f64.mul
-     f64.add
-     f64.mul
-     f64.add
-     br $~lib/math/sin_kern|inlined.3
-    else
-     local.get $6
-     local.get $7
-     f64.const 0.5
-     local.get $5
-     f64.mul
-     local.get $10
-     local.get $9
-     f64.mul
-     f64.sub
-     f64.mul
-     local.get $5
-     f64.sub
-     local.get $10
-     f64.const -0.16666666666666632
-     f64.mul
-     f64.sub
-     f64.sub
-     br $~lib/math/sin_kern|inlined.3
-    end
-    unreachable
-   end
+   local.get $0
+   f64.const 0
+   i32.const 0
+   call $~lib/math/sin_kern
    global.set $~lib/math/NativeMath.sincos_sin
    local.get $0
-   local.set $6
    f64.const 0
-   local.set $5
-   local.get $6
-   local.get $6
-   f64.mul
-   local.set $10
-   local.get $10
-   local.get $10
-   f64.mul
-   local.set $9
-   local.get $10
-   f64.const 0.0416666666666666
-   local.get $10
-   f64.const -0.001388888888887411
-   local.get $10
-   f64.const 2.480158728947673e-05
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.get $9
-   local.get $9
-   f64.mul
-   f64.const -2.7557314351390663e-07
-   local.get $10
-   f64.const 2.087572321298175e-09
-   local.get $10
-   f64.const -1.1359647557788195e-11
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.set $8
-   f64.const 0.5
-   local.get $10
-   f64.mul
-   local.set $7
-   f64.const 1
-   local.get $7
-   f64.sub
-   local.set $9
-   local.get $9
-   f64.const 1
-   local.get $9
-   f64.sub
-   local.get $7
-   f64.sub
-   local.get $10
-   local.get $8
-   f64.mul
-   local.get $6
-   local.get $5
-   f64.mul
-   f64.sub
-   f64.add
-   f64.add
+   call $~lib/math/cos_kern
    global.set $~lib/math/NativeMath.sincos_cos
    return
   end
@@ -15390,427 +13073,59 @@
    local.get $0
    local.get $0
    f64.sub
-   local.set $7
-   local.get $7
+   local.set $4
+   local.get $4
    global.set $~lib/math/NativeMath.sincos_sin
-   local.get $7
+   local.get $4
    global.set $~lib/math/NativeMath.sincos_cos
    return
   end
-  block $~lib/math/rempio2|inlined.3 (result i32)
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $11
-   local.get $3
-   local.set $4
-   local.get $11
-   i64.const 32
-   i64.shr_u
-   i32.wrap_i64
-   i32.const 2147483647
-   i32.and
-   local.set $12
-   i32.const 0
-   i32.const 1
-   i32.lt_s
-   drop
-   local.get $12
-   i32.const 1073928572
-   i32.lt_u
-   if
-    i32.const 1
-    local.set $13
-    local.get $4
-    i32.eqz
-    if
-     local.get $5
-     f64.const 1.5707963267341256
-     f64.sub
-     local.set $7
-     local.get $12
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $7
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $8
-      local.get $7
-      local.get $8
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.sub
-      local.set $9
-     else
-      local.get $7
-      f64.const 6.077100506303966e-11
-      f64.sub
-      local.set $7
-      local.get $7
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $8
-      local.get $7
-      local.get $8
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.sub
-      local.set $9
-     end
-    else
-     local.get $5
-     f64.const 1.5707963267341256
-     f64.add
-     local.set $7
-     local.get $12
-     i32.const 1073291771
-     i32.ne
-     if
-      local.get $7
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $8
-      local.get $7
-      local.get $8
-      f64.sub
-      f64.const 6.077100506506192e-11
-      f64.add
-      local.set $9
-     else
-      local.get $7
-      f64.const 6.077100506303966e-11
-      f64.add
-      local.set $7
-      local.get $7
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $8
-      local.get $7
-      local.get $8
-      f64.sub
-      f64.const 2.0222662487959506e-21
-      f64.add
-      local.set $9
-     end
-     i32.const -1
-     local.set $13
-    end
-    local.get $8
-    global.set $~lib/math/rempio2_y0
-    local.get $9
-    global.set $~lib/math/rempio2_y1
-    local.get $13
-    br $~lib/math/rempio2|inlined.3
-   end
-   local.get $12
-   i32.const 1094263291
-   i32.lt_u
-   if
-    local.get $5
-    f64.const 0.6366197723675814
-    f64.mul
-    f64.nearest
-    local.set $9
-    local.get $5
-    local.get $9
-    f64.const 1.5707963267341256
-    f64.mul
-    f64.sub
-    local.set $8
-    local.get $9
-    f64.const 6.077100506506192e-11
-    f64.mul
-    local.set $7
-    local.get $12
-    i32.const 20
-    i32.shr_u
-    local.set $13
-    local.get $8
-    local.get $7
-    f64.sub
-    local.set $10
-    local.get $10
-    i64.reinterpret_f64
-    i64.const 32
-    i64.shr_u
-    i32.wrap_i64
-    local.set $14
-    local.get $13
-    local.get $14
-    i32.const 20
-    i32.shr_u
-    i32.const 2047
-    i32.and
-    i32.sub
-    local.set $15
-    local.get $15
-    i32.const 16
-    i32.gt_u
-    if
-     local.get $8
-     local.set $6
-     local.get $9
-     f64.const 6.077100506303966e-11
-     f64.mul
-     local.set $7
-     local.get $6
-     local.get $7
-     f64.sub
-     local.set $8
-     local.get $9
-     f64.const 2.0222662487959506e-21
-     f64.mul
-     local.get $6
-     local.get $8
-     f64.sub
-     local.get $7
-     f64.sub
-     f64.sub
-     local.set $7
-     local.get $8
-     local.get $7
-     f64.sub
-     local.set $10
-     local.get $10
-     i64.reinterpret_f64
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     local.set $14
-     local.get $13
-     local.get $14
-     i32.const 20
-     i32.shr_u
-     i32.const 2047
-     i32.and
-     i32.sub
-     local.set $15
-     local.get $15
-     i32.const 49
-     i32.gt_u
-     if
-      local.get $8
-      local.set $16
-      local.get $9
-      f64.const 2.0222662487111665e-21
-      f64.mul
-      local.set $7
-      local.get $16
-      local.get $7
-      f64.sub
-      local.set $8
-      local.get $9
-      f64.const 8.4784276603689e-32
-      f64.mul
-      local.get $16
-      local.get $8
-      f64.sub
-      local.get $7
-      f64.sub
-      f64.sub
-      local.set $7
-      local.get $8
-      local.get $7
-      f64.sub
-      local.set $10
-     end
-    end
-    local.get $8
-    local.get $10
-    f64.sub
-    local.get $7
-    f64.sub
-    local.set $6
-    local.get $10
-    global.set $~lib/math/rempio2_y0
-    local.get $6
-    global.set $~lib/math/rempio2_y1
-    local.get $9
-    i32.trunc_f64_s
-    br $~lib/math/rempio2|inlined.3
-   end
-   local.get $5
-   local.get $11
-   call $~lib/math/pio2_large_quot
-   local.set $15
-   i32.const 0
-   local.get $15
-   i32.sub
-   local.get $15
-   local.get $4
-   select
-  end
-  local.set $17
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/math/rempio2
+  local.set $5
   global.get $~lib/math/rempio2_y0
-  local.set $18
+  local.set $6
   global.get $~lib/math/rempio2_y1
-  local.set $19
-  block $~lib/math/sin_kern|inlined.4 (result f64)
-   local.get $18
-   local.set $9
-   local.get $19
-   local.set $16
-   i32.const 1
-   local.set $13
-   local.get $9
-   local.get $9
-   f64.mul
-   local.set $5
-   local.get $5
-   local.get $5
-   f64.mul
-   local.set $6
-   f64.const 0.00833333333332249
-   local.get $5
-   f64.const -1.984126982985795e-04
-   local.get $5
-   f64.const 2.7557313707070068e-06
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.get $5
-   local.get $6
-   f64.mul
-   f64.const -2.5050760253406863e-08
-   local.get $5
-   f64.const 1.58969099521155e-10
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   local.set $10
-   local.get $5
-   local.get $9
-   f64.mul
-   local.set $7
-   local.get $13
-   i32.eqz
-   if
-    local.get $9
-    local.get $7
-    f64.const -0.16666666666666632
-    local.get $5
-    local.get $10
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    br $~lib/math/sin_kern|inlined.4
-   else
-    local.get $9
-    local.get $5
-    f64.const 0.5
-    local.get $16
-    f64.mul
-    local.get $7
-    local.get $10
-    f64.mul
-    f64.sub
-    f64.mul
-    local.get $16
-    f64.sub
-    local.get $7
-    f64.const -0.16666666666666632
-    f64.mul
-    f64.sub
-    f64.sub
-    br $~lib/math/sin_kern|inlined.4
-   end
-   unreachable
-  end
-  local.set $20
-  local.get $18
-  local.set $16
-  local.get $19
-  local.set $8
-  local.get $16
-  local.get $16
-  f64.mul
   local.set $7
+  local.get $6
   local.get $7
+  i32.const 1
+  call $~lib/math/sin_kern
+  local.set $8
+  local.get $6
   local.get $7
-  f64.mul
-  local.set $10
-  local.get $7
-  f64.const 0.0416666666666666
-  local.get $7
-  f64.const -0.001388888888887411
-  local.get $7
-  f64.const 2.480158728947673e-05
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  f64.mul
-  local.get $10
-  local.get $10
-  f64.mul
-  f64.const -2.7557314351390663e-07
-  local.get $7
-  f64.const 2.087572321298175e-09
-  local.get $7
-  f64.const -1.1359647557788195e-11
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  f64.mul
-  f64.add
-  local.set $6
-  f64.const 0.5
-  local.get $7
-  f64.mul
-  local.set $5
-  f64.const 1
-  local.get $5
-  f64.sub
+  call $~lib/math/cos_kern
+  local.set $9
+  local.get $8
   local.set $10
-  local.get $10
-  f64.const 1
-  local.get $10
-  f64.sub
+  local.get $9
+  local.set $11
   local.get $5
-  f64.sub
-  local.get $7
-  local.get $6
-  f64.mul
-  local.get $16
-  local.get $8
-  f64.mul
-  f64.sub
-  f64.add
-  f64.add
-  local.set $21
-  local.get $20
-  local.set $22
-  local.get $21
-  local.set $23
-  local.get $17
   i32.const 1
   i32.and
   if
-   local.get $21
-   local.set $22
-   local.get $20
+   local.get $9
+   local.set $10
+   local.get $8
    f64.neg
-   local.set $23
+   local.set $11
   end
-  local.get $17
+  local.get $5
   i32.const 2
   i32.and
   if
-   local.get $22
+   local.get $10
    f64.neg
-   local.set $22
-   local.get $23
+   local.set $10
+   local.get $11
    f64.neg
-   local.set $23
+   local.set $11
   end
-  local.get $22
+  local.get $10
   global.set $~lib/math/NativeMath.sincos_sin
-  local.get $23
+  local.get $11
   global.set $~lib/math/NativeMath.sincos_cos
  )
  (func $std/math/test_sincos (param $0 i64) (param $1 i64) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i32) (result i32)
@@ -16298,8 +13613,7 @@
   (local $0 f64)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i64)
-  (local $4 f32)
+  (local $3 f32)
   global.get $~lib/math/NativeMath.E
   global.get $~lib/math/NativeMath.E
   f64.eq
@@ -47240,9 +44554,7 @@
   end
   call $~lib/bindings/Math/random
   i64.reinterpret_f64
-  local.set $3
-  local.get $3
-  call $~lib/math/NativeMath.seedRandom
+  call $~lib/math/NativeMathf.seedRandom
   i32.const 0
   local.set $1
   loop $for-loop|1
@@ -47254,12 +44566,12 @@
    local.get $2
    if
     call $~lib/math/NativeMathf.random
-    local.set $4
-    local.get $4
+    local.set $3
+    local.get $3
     f32.const 0
     f32.ge
     if (result i32)
-     local.get $4
+     local.get $3
      f32.const 1
      f32.lt
     else
@@ -48296,257 +45608,217 @@
    unreachable
   end
   f64.const 0
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3127
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const -0
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 1
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3128
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const 1
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3129
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const -1
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 1
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3130
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const nan:0x8000000000000
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3131
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const nan:0x8000000000000
   f64.neg
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3132
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const inf
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3133
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const inf
   f64.neg
-  local.set $0
-  local.get $0
-  i64.reinterpret_f64
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.get $0
-  local.get $0
-  f64.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMath.signbit
   i32.const 1
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3134
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const 0
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3140
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const -0
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 1
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3141
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const 1
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3142
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const -1
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 1
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3143
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const nan:0x400000
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3144
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const nan:0x400000
   f32.neg
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3145
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const inf
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 0
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3146
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f32.const inf
   f32.neg
-  local.set $4
-  local.get $4
-  i32.reinterpret_f32
-  i32.const 31
-  i32.shr_u
-  local.get $4
-  local.get $4
-  f32.eq
-  i32.and
-  i32.const 0
-  i32.ne
+  call $~lib/math/NativeMathf.signbit
   i32.const 1
   i32.eq
-  drop
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 32
+   i32.const 3147
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
   f64.const -8.06684839057968
   f64.const 4.535662560676869
   f64.const 1.0044767307740567
@@ -58746,8 +56018,8 @@
   f32.const nan:0x400000
   i32.const 1
   call $~lib/math/ipow32f
-  local.tee $4
-  local.get $4
+  local.tee $3
+  local.get $3
   f32.ne
   i32.eqz
   if
@@ -58761,8 +56033,8 @@
   f32.const nan:0x400000
   i32.const -1
   call $~lib/math/ipow32f
-  local.tee $4
-  local.get $4
+  local.tee $3
+  local.get $3
   f32.ne
   i32.eqz
   if
@@ -58776,8 +56048,8 @@
   f32.const nan:0x400000
   i32.const 2
   call $~lib/math/ipow32f
-  local.tee $4
-  local.get $4
+  local.tee $3
+  local.get $3
   f32.ne
   i32.eqz
   if
diff --git a/tests/compiler/std/object.optimized.wat b/tests/compiler/std/object.optimized.wat
index 856757bab1..f5ee467af6 100644
--- a/tests/compiler/std/object.optimized.wat
+++ b/tests/compiler/std/object.optimized.wat
@@ -1,8 +1,7 @@
 (module
  (type $none_=>_none (func))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $f32_f32_=>_i32 (func (param f32 f32) (result i32)))
  (type $f64_f64_=>_i32 (func (param f64 f64) (result i32)))
@@ -55,23 +54,6 @@
   f32.ne
   i32.and
  )
- (func $~lib/object/Object.is<bool> (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  i32.const 0
-  i32.ne
-  local.get $1
-  i32.const 0
-  i32.ne
-  i32.eq
- )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -148,38 +130,45 @@
   end
   i32.const 0
  )
- (func $~lib/object/Object.is<~lib/string/String> (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__eq (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  block $__inlined_func$~lib/string/String.__eq (result i32)
+  local.get $0
+  local.get $1
+  i32.eq
+  if
    i32.const 1
+   return
+  end
+  block $folding-inner0
+   local.get $1
+   i32.eqz
+   i32.const 1
+   local.get $0
+   select
+   br_if $folding-inner0
    local.get $0
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.tee $2
    local.get $1
-   i32.eq
-   br_if $__inlined_func$~lib/string/String.__eq
-   drop
-   block $folding-inner0
-    local.get $1
-    i32.eqz
-    i32.const 1
-    local.get $0
-    select
-    br_if $folding-inner0
-    local.get $0
-    call $~lib/string/String#get:length
-    local.tee $2
-    local.get $1
-    call $~lib/string/String#get:length
-    i32.ne
-    br_if $folding-inner0
-    local.get $0
-    local.get $1
-    local.get $2
-    call $~lib/util/string/compareImpl
-    i32.eqz
-    br $__inlined_func$~lib/string/String.__eq
-   end
-   i32.const 0
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   i32.ne
+   br_if $folding-inner0
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/string/compareImpl
+   i32.eqz
+   return
   end
+  i32.const 0
  )
  (func $start:std/object
   f64.const 0
@@ -523,46 +512,9 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1
-  i32.const 1
-  call $~lib/object/Object.is<bool>
-  i32.const 1
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 41
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  i32.const 0
-  call $~lib/object/Object.is<bool>
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 42
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 0
-  call $~lib/object/Object.is<bool>
-  i32.const 1
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 43
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
   i32.const 1088
   i32.const 1088
-  call $~lib/object/Object.is<~lib/string/String>
+  call $~lib/string/String.__eq
   i32.const 1
   i32.ne
   if
@@ -575,7 +527,7 @@
   end
   i32.const 1088
   i32.const 1120
-  call $~lib/object/Object.is<~lib/string/String>
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1040
@@ -586,7 +538,7 @@
   end
   i32.const 1088
   i32.const 1152
-  call $~lib/object/Object.is<~lib/string/String>
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1040
@@ -597,7 +549,7 @@
   end
   i32.const 0
   i32.const 0
-  call $~lib/object/Object.is<~lib/string/String>
+  call $~lib/string/String.__eq
   i32.const 1
   i32.ne
   if
@@ -610,7 +562,7 @@
   end
   i32.const 1184
   i32.const 0
-  call $~lib/object/Object.is<~lib/string/String>
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1040
@@ -621,7 +573,7 @@
   end
   i32.const 0
   i32.const 1184
-  call $~lib/object/Object.is<~lib/string/String>
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1040
diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat
index fc82d12ebf..6d1b020b39 100644
--- a/tests/compiler/std/operator-overloading.optimized.wat
+++ b/tests/compiler/std/operator-overloading.optimized.wat
@@ -2120,12 +2120,10 @@
   global.set $std/operator-overloading/incdec
   global.get $std/operator-overloading/incdec
   local.tee $0
+  local.get $0
   i32.load
   i32.const 1
   i32.add
-  local.set $1
-  local.get $0
-  local.get $1
   i32.store
   local.get $0
   local.get $0
@@ -2158,12 +2156,10 @@
   end
   global.get $std/operator-overloading/incdec
   local.tee $0
+  local.get $0
   i32.load
   i32.const 1
   i32.sub
-  local.set $1
-  local.get $0
-  local.get $1
   i32.store
   local.get $0
   local.get $0
diff --git a/tests/compiler/std/operator-overloading.untouched.wat b/tests/compiler/std/operator-overloading.untouched.wat
index ca613cd6b6..5d103ef43e 100644
--- a/tests/compiler/std/operator-overloading.untouched.wat
+++ b/tests/compiler/std/operator-overloading.untouched.wat
@@ -4,8 +4,14 @@
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_=>_f64 (func (param i32) (result f64)))
  (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_f64_=>_f64 (func (param i32 f64) (result f64)))
+ (type $i64_=>_f64 (func (param i64) (result f64)))
+ (type $f64_i64_i64_=>_f64 (func (param f64 i64 i64) (result f64)))
+ (type $f64_f64_i32_=>_f64 (func (param f64 f64 i32) (result f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
  (data (i32.const 16) "6\00\00\00\01\00\00\00\01\00\00\006\00\00\00s\00t\00d\00/\00o\00p\00e\00r\00a\00t\00o\00r\00-\00o\00v\00e\00r\00l\00o\00a\00d\00i\00n\00g\00.\00t\00s\00")
@@ -354,20 +360,86 @@
   call $~lib/rt/stub/__release
   local.get $2
  )
- (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
-  (local $2 f64)
-  (local $3 f64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i64)
-  (local $7 i64)
-  (local $8 i64)
-  (local $9 i64)
+ (func $~lib/util/math/zeroinfnan (param $0 i64) (result i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.sub
+  i64.const -9007199254740992
+  i64.const 1
+  i64.sub
+  i64.ge_u
+ )
+ (func $~lib/util/math/checkint (param $0 i64) (result i32)
+  (local $1 i64)
+  local.get $0
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  local.set $1
+  local.get $1
+  i64.const 1023
+  i64.lt_u
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  i64.gt_u
+  if
+   i32.const 2
+   return
+  end
+  i64.const 1
+  i64.const 1023
+  i64.const 52
+  i64.add
+  local.get $1
+  i64.sub
+  i64.shl
+  local.set $1
+  local.get $0
+  local.get $1
+  i64.const 1
+  i64.sub
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  local.get $1
+  i64.and
+  i64.const 0
+  i64.ne
+  if
+   i32.const 1
+   return
+  end
+  i32.const 2
+ )
+ (func $~lib/util/math/log_inline (param $0 i64) (result f64)
+  (local $1 i64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  (local $8 f64)
+  (local $9 f64)
   (local $10 f64)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
   (local $15 f64)
   (local $16 f64)
   (local $17 f64)
@@ -383,955 +455,843 @@
   (local $27 f64)
   (local $28 f64)
   (local $29 f64)
-  (local $30 f64)
-  (local $31 f64)
-  (local $32 f64)
-  (local $33 f64)
-  (local $34 f64)
-  (local $35 f64)
-  (local $36 f64)
-  (local $37 f64)
-  (local $38 f64)
-  (local $39 i32)
-  (local $40 i32)
-  (local $41 i32)
-  (local $42 i32)
-  (local $43 i64)
-  (local $44 i64)
+  local.get $0
+  i64.const 4604531861337669632
+  i64.sub
+  local.set $1
   local.get $1
-  f64.abs
-  f64.const 2
-  f64.le
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shr_u
+  i64.const 127
+  i64.and
+  i32.wrap_i64
+  local.set $2
+  local.get $1
+  i64.const 52
+  i64.shr_s
+  local.set $3
+  local.get $0
+  local.get $1
+  i64.const 4095
+  i64.const 52
+  i64.shl
+  i64.and
+  i64.sub
+  local.set $4
+  local.get $4
+  f64.reinterpret_i64
+  local.set $5
+  local.get $3
+  f64.convert_i64_s
+  local.set $6
+  i32.const 88
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load
+  local.set $7
+  i32.const 88
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=16
+  local.set $8
+  i32.const 88
+  local.get $2
+  i32.const 2
+  i32.const 3
+  i32.add
+  i32.shl
+  i32.add
+  f64.load offset=24
+  local.set $9
+  local.get $4
+  i64.const 2147483648
+  i64.add
+  i64.const -4294967296
+  i64.and
+  f64.reinterpret_i64
+  local.set $10
+  local.get $5
+  local.get $10
+  f64.sub
+  local.set $11
+  local.get $10
+  local.get $7
+  f64.mul
+  f64.const 1
+  f64.sub
+  local.set $12
+  local.get $11
+  local.get $7
+  f64.mul
+  local.set $13
+  local.get $12
+  local.get $13
+  f64.add
+  local.set $14
+  local.get $6
+  f64.const 0.6931471805598903
+  f64.mul
+  local.get $8
+  f64.add
+  local.set $15
+  local.get $15
+  local.get $14
+  f64.add
+  local.set $16
+  local.get $6
+  f64.const 5.497923018708371e-14
+  f64.mul
+  local.get $9
+  f64.add
+  local.set $17
+  local.get $15
+  local.get $16
+  f64.sub
+  local.get $14
+  f64.add
+  local.set $18
+  f64.const -0.5
+  local.get $14
+  f64.mul
+  local.set $19
+  local.get $14
+  local.get $19
+  f64.mul
+  local.set $20
+  local.get $14
+  local.get $20
+  f64.mul
+  local.set $21
+  f64.const -0.5
+  local.get $12
+  f64.mul
+  local.set $22
+  local.get $12
+  local.get $22
+  f64.mul
+  local.set $23
+  local.get $16
+  local.get $23
+  f64.add
+  local.set $24
+  local.get $13
+  local.get $19
+  local.get $22
+  f64.add
+  f64.mul
+  local.set $25
+  local.get $16
+  local.get $24
+  f64.sub
+  local.get $23
+  f64.add
+  local.set $26
+  local.get $21
+  f64.const -0.6666666666666679
+  local.get $14
+  f64.const 0.5000000000000007
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const 0.7999999995323976
+  local.get $14
+  f64.const -0.6666666663487739
+  f64.mul
+  f64.add
+  local.get $20
+  f64.const -1.142909628459501
+  local.get $14
+  f64.const 1.0000415263675542
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  f64.mul
+  local.set $27
+  local.get $17
+  local.get $18
+  f64.add
+  local.get $25
+  f64.add
+  local.get $26
+  f64.add
+  local.get $27
+  f64.add
+  local.set $28
+  local.get $24
+  local.get $28
+  f64.add
+  local.set $29
+  local.get $24
+  local.get $29
+  f64.sub
+  local.get $28
+  f64.add
+  global.set $~lib/util/math/log_tail
+  local.get $29
+ )
+ (func $~lib/util/math/xflow (param $0 i32) (param $1 f64) (result f64)
+  local.get $1
+  f64.neg
+  local.get $1
+  local.get $0
+  select
+  local.get $1
+  f64.mul
+ )
+ (func $~lib/util/math/uflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 1152921504606846976
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/oflow (param $0 i32) (result f64)
+  local.get $0
+  i64.const 8070450532247928832
+  f64.reinterpret_i64
+  call $~lib/util/math/xflow
+ )
+ (func $~lib/util/math/specialcase (param $0 f64) (param $1 i64) (param $2 i64) (result f64)
+  (local $3 f64)
+  (local $4 f64)
+  (local $5 f64)
+  (local $6 f64)
+  (local $7 f64)
+  local.get $2
+  i64.const 2147483648
+  i64.and
+  i64.const 0
+  i64.ne
+  i32.eqz
   if
    local.get $1
-   f64.const 2
-   f64.eq
-   if
-    local.get $0
-    local.get $0
-    f64.mul
-    return
-   end
+   i64.const 1009
+   i64.const 52
+   i64.shl
+   i64.sub
+   local.set $1
    local.get $1
-   f64.const 0.5
+   f64.reinterpret_i64
+   local.set $3
+   f64.const 5486124068793688683255936e279
+   local.get $3
+   local.get $3
+   local.get $0
+   f64.mul
+   f64.add
+   f64.mul
+   return
+  end
+  local.get $1
+  i64.const 1022
+  i64.const 52
+  i64.shl
+  i64.add
+  local.set $1
+  local.get $1
+  f64.reinterpret_i64
+  local.set $3
+  local.get $3
+  local.get $3
+  local.get $0
+  f64.mul
+  f64.add
+  local.set $4
+  local.get $4
+  f64.abs
+  f64.const 1
+  f64.lt
+  if
+   f64.const 1
+   local.get $4
+   f64.copysign
+   local.set $5
+   local.get $3
+   local.get $4
+   f64.sub
+   local.get $3
+   local.get $0
+   f64.mul
+   f64.add
+   local.set $6
+   local.get $5
+   local.get $4
+   f64.add
+   local.set $7
+   local.get $5
+   local.get $7
+   f64.sub
+   local.get $4
+   f64.add
+   local.get $6
+   f64.add
+   local.set $6
+   local.get $7
+   local.get $6
+   f64.add
+   local.get $5
+   f64.sub
+   local.set $4
+   local.get $4
+   f64.const 0
    f64.eq
    if
-    local.get $0
-    f64.sqrt
-    f64.abs
-    f64.const inf
-    local.get $0
-    f64.const inf
-    f64.neg
-    f64.ne
-    select
-    return
+    local.get $1
+    i64.const -9223372036854775808
+    i64.and
+    f64.reinterpret_i64
+    local.set $4
    end
-   local.get $1
-   f64.const -1
-   f64.eq
+  end
+  local.get $4
+  f64.const 2.2250738585072014e-308
+  f64.mul
+ )
+ (func $~lib/util/math/exp_inline (param $0 f64) (param $1 f64) (param $2 i32) (result f64)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 f64)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $15
+  local.get $15
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  i32.const 2047
+  i32.and
+  local.set $3
+  local.get $3
+  i32.const 969
+  i32.sub
+  i32.const 63
+  i32.ge_u
+  if
+   local.get $3
+   i32.const 969
+   i32.sub
+   i32.const -2147483648
+   i32.ge_u
    if
+    f64.const -1
     f64.const 1
-    local.get $0
-    f64.div
-    return
-   end
-   local.get $1
-   f64.const 1
-   f64.eq
-   if
-    local.get $0
+    local.get $2
+    select
     return
    end
-   local.get $1
-   f64.const 0
-   f64.eq
+   local.get $3
+   i32.const 1033
+   i32.ge_u
    if
-    f64.const 1
+    local.get $15
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    if (result f64)
+     local.get $2
+     call $~lib/util/math/uflow
+    else
+     local.get $2
+     call $~lib/util/math/oflow
+    end
     return
    end
-  end
-  i32.const 0
-  i32.const 1
-  i32.lt_s
-  drop
-  block $~lib/util/math/pow_lut|inlined.0 (result f64)
-   local.get $0
-   local.set $3
-   local.get $1
-   local.set $2
    i32.const 0
-   local.set $4
-   local.get $3
-   i64.reinterpret_f64
-   local.set $5
-   local.get $2
-   i64.reinterpret_f64
-   local.set $6
-   local.get $5
-   i64.const 52
-   i64.shr_u
-   local.set $7
+   local.set $3
+  end
+  f64.const 184.6649652337873
+  local.get $0
+  f64.mul
+  local.set $9
+  local.get $9
+  f64.const 6755399441055744
+  f64.add
+  local.set $8
+  local.get $8
+  i64.reinterpret_f64
+  local.set $4
+  local.get $8
+  f64.const 6755399441055744
+  f64.sub
+  local.set $8
+  local.get $0
+  local.get $8
+  f64.const -0.005415212348111709
+  f64.mul
+  f64.add
+  local.get $8
+  f64.const -1.2864023111638346e-14
+  f64.mul
+  f64.add
+  local.set $10
+  local.get $10
+  local.get $1
+  f64.add
+  local.set $10
+  local.get $4
+  i64.const 127
+  i64.and
+  i64.const 1
+  i64.shl
+  i32.wrap_i64
+  local.set $7
+  local.get $4
+  local.get $2
+  i64.extend_i32_u
+  i64.add
+  i64.const 52
+  i64.const 7
+  i64.sub
+  i64.shl
+  local.set $5
+  i32.const 4184
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  f64.reinterpret_i64
+  local.set $13
+  i32.const 4184
+  local.get $7
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load offset=8
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $10
+  local.get $10
+  f64.mul
+  local.set $11
+  local.get $13
+  local.get $10
+  f64.add
+  local.get $11
+  f64.const 0.49999999999996786
+  local.get $10
+  f64.const 0.16666666666665886
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.get $11
+  local.get $11
+  f64.mul
+  f64.const 0.0416666808410674
+  local.get $10
+  f64.const 0.008333335853059549
+  f64.mul
+  f64.add
+  f64.mul
+  f64.add
+  local.set $14
+  local.get $3
+  i32.const 0
+  i32.eq
+  if
+   local.get $14
+   local.get $6
+   local.get $4
+   call $~lib/util/math/specialcase
+   return
+  end
+  local.get $6
+  f64.reinterpret_i64
+  local.set $12
+  local.get $12
+  local.get $12
+  local.get $14
+  f64.mul
+  f64.add
+ )
+ (func $~lib/util/math/pow_lut (param $0 f64) (param $1 f64) (result f64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 f64)
+  (local $8 i32)
+  (local $9 f64)
+  (local $10 f64)
+  (local $11 f64)
+  (local $12 f64)
+  (local $13 f64)
+  (local $14 f64)
+  (local $15 f64)
+  (local $16 f64)
+  i32.const 0
+  local.set $2
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $1
+  i64.reinterpret_f64
+  local.set $4
+  local.get $3
+  i64.const 52
+  i64.shr_u
+  local.set $5
+  local.get $4
+  i64.const 52
+  i64.shr_u
+  local.set $6
+  local.get $5
+  i64.const 1
+  i64.sub
+  i64.const 2047
+  i64.const 1
+  i64.sub
+  i64.ge_u
+  if (result i32)
+   i32.const 1
+  else
    local.get $6
-   i64.const 52
-   i64.shr_u
-   local.set $8
-   local.get $7
-   i64.const 1
-   i64.sub
    i64.const 2047
-   i64.const 1
+   i64.and
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
    i64.sub
    i64.ge_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
-   end
+  end
+  if
+   local.get $4
+   call $~lib/util/math/zeroinfnan
    if
-    local.get $6
-    local.set $9
-    local.get $9
+    local.get $4
     i64.const 1
     i64.shl
+    i64.const 0
+    i64.eq
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
+    if
+     f64.const nan:0x8000000000000
+     return
+    end
+    local.get $3
     i64.const 1
-    i64.sub
+    i64.shl
     i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
-    if
-     local.get $6
-     i64.const 1
-     i64.shl
-     i64.const 0
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
+    i64.gt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $4
      i64.const 1
      i64.shl
      i64.const -9007199254740992
      i64.gt_u
-     if (result i32)
-      i32.const 1
-     else
-      local.get $6
-      i64.const 1
-      i64.shl
-      i64.const -9007199254740992
-      i64.gt_u
-     end
-     if
-      local.get $3
-      local.get $2
-      f64.add
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.eq
-     if
-      f64.const nan:0x8000000000000
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 1
-     i64.shl
-     i64.const 9214364837600034816
-     i64.lt_u
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     i32.eqz
-     i32.eq
-     if
-      f64.const 0
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $2
-     local.get $2
-     f64.mul
-     br $~lib/util/math/pow_lut|inlined.0
     end
-    local.get $5
-    local.set $9
-    local.get $9
+    if
+     local.get $0
+     local.get $1
+     f64.add
+     return
+    end
+    local.get $3
     i64.const 1
     i64.shl
-    i64.const 1
-    i64.sub
-    i64.const -9007199254740992
-    i64.const 1
-    i64.sub
-    i64.ge_u
+    i64.const 9214364837600034816
+    i64.eq
     if
-     local.get $3
-     local.get $3
-     f64.mul
-     local.set $10
-     local.get $5
-     i64.const 63
-     i64.shr_u
-     i32.wrap_i64
-     if (result i32)
-      block $~lib/util/math/checkint|inlined.0 (result i32)
-       local.get $6
-       local.set $9
-       local.get $9
-       i64.const 52
-       i64.shr_u
-       i64.const 2047
-       i64.and
-       local.set $11
-       local.get $11
-       i64.const 1023
-       i64.lt_u
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $11
-       i64.const 1023
-       i64.const 52
-       i64.add
-       i64.gt_u
-       if
-        i32.const 2
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i64.const 1
-       i64.const 1023
-       i64.const 52
-       i64.add
-       local.get $11
-       i64.sub
-       i64.shl
-       local.set $11
-       local.get $9
-       local.get $11
-       i64.const 1
-       i64.sub
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 0
-        br $~lib/util/math/checkint|inlined.0
-       end
-       local.get $9
-       local.get $11
-       i64.and
-       i64.const 0
-       i64.ne
-       if
-        i32.const 1
-        br $~lib/util/math/checkint|inlined.0
-       end
-       i32.const 2
-      end
-      i32.const 1
-      i32.eq
-     else
-      i32.const 0
-     end
-     if
-      local.get $10
-      f64.neg
-      local.set $10
-     end
-     local.get $6
-     i64.const 63
-     i64.shr_u
-     i64.const 0
-     i64.ne
-     if (result f64)
-      f64.const 1
-      local.get $10
-      f64.div
-     else
-      local.get $10
-     end
-     br $~lib/util/math/pow_lut|inlined.0
+     f64.const nan:0x8000000000000
+     return
     end
-    local.get $5
+    local.get $3
+    i64.const 1
+    i64.shl
+    i64.const 9214364837600034816
+    i64.lt_u
+    local.get $4
     i64.const 63
     i64.shr_u
     i64.const 0
     i64.ne
+    i32.eqz
+    i32.eq
     if
-     block $~lib/util/math/checkint|inlined.1 (result i32)
-      local.get $6
-      local.set $9
-      local.get $9
-      i64.const 52
-      i64.shr_u
-      i64.const 2047
-      i64.and
-      local.set $11
-      local.get $11
-      i64.const 1023
-      i64.lt_u
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $11
-      i64.const 1023
-      i64.const 52
-      i64.add
-      i64.gt_u
-      if
-       i32.const 2
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i64.const 1
-      i64.const 1023
-      i64.const 52
-      i64.add
-      local.get $11
-      i64.sub
-      i64.shl
-      local.set $11
-      local.get $9
-      local.get $11
-      i64.const 1
-      i64.sub
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 0
-       br $~lib/util/math/checkint|inlined.1
-      end
-      local.get $9
-      local.get $11
-      i64.and
-      i64.const 0
-      i64.ne
-      if
-       i32.const 1
-       br $~lib/util/math/checkint|inlined.1
-      end
-      i32.const 2
-     end
-     local.set $12
-     local.get $12
-     i32.const 0
-     i32.eq
-     if
-      local.get $3
-      local.get $3
-      f64.sub
-      local.get $3
-      local.get $3
-      f64.sub
-      f64.div
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $12
+     f64.const 0
+     return
+    end
+    local.get $1
+    local.get $1
+    f64.mul
+    return
+   end
+   local.get $3
+   call $~lib/util/math/zeroinfnan
+   if
+    local.get $0
+    local.get $0
+    f64.mul
+    local.set $7
+    local.get $3
+    i64.const 63
+    i64.shr_u
+    i32.wrap_i64
+    if (result i32)
+     local.get $4
+     call $~lib/util/math/checkint
      i32.const 1
      i32.eq
-     if
-      i32.const 262144
-      local.set $4
-     end
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
+    else
+     i32.const 0
+    end
+    if
      local.get $7
-     i64.const 2047
-     i64.and
+     f64.neg
      local.set $7
     end
+    local.get $4
+    i64.const 63
+    i64.shr_u
+    i64.const 0
+    i64.ne
+    if (result f64)
+     f64.const 1
+     local.get $7
+     f64.div
+    else
+     local.get $7
+    end
+    return
+   end
+   local.get $3
+   i64.const 63
+   i64.shr_u
+   i64.const 0
+   i64.ne
+   if
+    local.get $4
+    call $~lib/util/math/checkint
+    local.set $8
     local.get $8
-    i64.const 2047
-    i64.and
-    i64.const 958
-    i64.sub
-    i64.const 1086
-    i64.const 958
-    i64.sub
-    i64.ge_u
+    i32.const 0
+    i32.eq
     if
-     local.get $5
-     i64.const 4607182418800017408
-     i64.eq
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $8
-     i64.const 2047
-     i64.and
-     i64.const 958
-     i64.lt_u
-     if
-      f64.const 1
-      br $~lib/util/math/pow_lut|inlined.0
-     end
-     local.get $5
-     i64.const 4607182418800017408
-     i64.gt_u
-     local.get $8
-     i64.const 2048
-     i64.lt_u
-     i32.eq
-     if (result f64)
-      f64.const inf
-     else
-      f64.const 0
-     end
-     br $~lib/util/math/pow_lut|inlined.0
+     local.get $0
+     local.get $0
+     f64.sub
+     local.get $0
+     local.get $0
+     f64.sub
+     f64.div
+     return
     end
-    local.get $7
-    i64.const 0
-    i64.eq
+    local.get $8
+    i32.const 1
+    i32.eq
     if
-     local.get $3
-     f64.const 4503599627370496
-     f64.mul
-     i64.reinterpret_f64
-     local.set $5
-     local.get $5
-     i64.const 9223372036854775807
-     i64.and
-     local.set $5
-     local.get $5
-     i64.const 52
-     i64.const 52
-     i64.shl
-     i64.sub
-     local.set $5
+     i32.const 262144
+     local.set $2
     end
+    local.get $3
+    i64.const 9223372036854775807
+    i64.and
+    local.set $3
+    local.get $5
+    i64.const 2047
+    i64.and
+    local.set $5
    end
-   local.get $5
-   local.set $9
-   local.get $9
-   i64.const 4604531861337669632
-   i64.sub
-   local.set $11
-   local.get $11
-   i64.const 52
-   i64.const 7
-   i64.sub
-   i64.shr_u
-   i64.const 127
-   i64.and
-   i32.wrap_i64
-   local.set $12
-   local.get $11
-   i64.const 52
-   i64.shr_s
-   local.set $13
-   local.get $9
-   local.get $11
-   i64.const 4095
-   i64.const 52
-   i64.shl
-   i64.and
-   i64.sub
-   local.set $14
-   local.get $14
-   f64.reinterpret_i64
-   local.set $10
-   local.get $13
-   f64.convert_i64_s
-   local.set $15
-   i32.const 88
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load
-   local.set $16
-   i32.const 88
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=16
-   local.set $17
-   i32.const 88
-   local.get $12
-   i32.const 2
-   i32.const 3
-   i32.add
-   i32.shl
-   i32.add
-   f64.load offset=24
-   local.set $18
-   local.get $14
-   i64.const 2147483648
-   i64.add
-   i64.const -4294967296
-   i64.and
-   f64.reinterpret_i64
-   local.set $19
-   local.get $10
-   local.get $19
-   f64.sub
-   local.set $20
-   local.get $19
-   local.get $16
-   f64.mul
-   f64.const 1
-   f64.sub
-   local.set $21
-   local.get $20
-   local.get $16
-   f64.mul
-   local.set $22
-   local.get $21
-   local.get $22
-   f64.add
-   local.set $23
-   local.get $15
-   f64.const 0.6931471805598903
-   f64.mul
-   local.get $17
-   f64.add
-   local.set $24
-   local.get $24
-   local.get $23
-   f64.add
-   local.set $25
-   local.get $15
-   f64.const 5.497923018708371e-14
-   f64.mul
-   local.get $18
-   f64.add
-   local.set $26
-   local.get $24
-   local.get $25
-   f64.sub
-   local.get $23
-   f64.add
-   local.set $27
-   f64.const -0.5
-   local.get $23
-   f64.mul
-   local.set $28
-   local.get $23
-   local.get $28
-   f64.mul
-   local.set $29
-   local.get $23
-   local.get $29
-   f64.mul
-   local.set $30
-   f64.const -0.5
-   local.get $21
-   f64.mul
-   local.set $31
-   local.get $21
-   local.get $31
-   f64.mul
-   local.set $32
-   local.get $25
-   local.get $32
-   f64.add
-   local.set $33
-   local.get $22
-   local.get $28
-   local.get $31
-   f64.add
-   f64.mul
-   local.set $34
-   local.get $25
-   local.get $33
-   f64.sub
-   local.get $32
-   f64.add
-   local.set $35
-   local.get $30
-   f64.const -0.6666666666666679
-   local.get $23
-   f64.const 0.5000000000000007
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const 0.7999999995323976
-   local.get $23
-   f64.const -0.6666666663487739
-   f64.mul
-   f64.add
-   local.get $29
-   f64.const -1.142909628459501
-   local.get $23
-   f64.const 1.0000415263675542
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   f64.add
-   f64.mul
-   local.set $36
-   local.get $26
-   local.get $27
-   f64.add
-   local.get $34
-   f64.add
-   local.get $35
-   f64.add
-   local.get $36
-   f64.add
-   local.set $37
-   local.get $33
-   local.get $37
-   f64.add
-   local.set $38
-   local.get $33
-   local.get $38
-   f64.sub
-   local.get $37
-   f64.add
-   global.set $~lib/util/math/log_tail
-   local.get $38
-   local.set $38
-   global.get $~lib/util/math/log_tail
-   local.set $37
    local.get $6
-   i64.const -134217728
-   i64.and
-   f64.reinterpret_i64
-   local.set $34
-   local.get $2
-   local.get $34
-   f64.sub
-   local.set $33
-   local.get $38
-   i64.reinterpret_f64
-   i64.const -134217728
+   i64.const 2047
    i64.and
-   f64.reinterpret_i64
-   local.set $32
-   local.get $38
-   local.get $32
-   f64.sub
-   local.get $37
-   f64.add
-   local.set $31
-   local.get $34
-   local.get $32
-   f64.mul
-   local.set $36
-   local.get $33
-   local.get $32
-   f64.mul
-   local.get $2
-   local.get $31
-   f64.mul
-   f64.add
-   local.set $35
-   block $~lib/util/math/exp_inline|inlined.0 (result f64)
-    local.get $36
-    local.set $15
-    local.get $35
-    local.set $10
-    local.get $4
-    local.set $12
-    local.get $15
-    i64.reinterpret_f64
-    local.set $9
-    local.get $9
-    i64.const 52
-    i64.shr_u
-    i32.wrap_i64
-    i32.const 2047
-    i32.and
-    local.set $39
-    local.get $39
-    i32.const 969
-    i32.sub
-    i32.const 63
-    i32.ge_u
+   i64.const 958
+   i64.sub
+   i64.const 1086
+   i64.const 958
+   i64.sub
+   i64.ge_u
+   if
+    local.get $3
+    i64.const 4607182418800017408
+    i64.eq
     if
-     local.get $39
-     i32.const 969
-     i32.sub
-     i32.const -2147483648
-     i32.ge_u
-     if
-      f64.const -1
-      f64.const 1
-      local.get $12
-      select
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     local.get $39
-     i32.const 1033
-     i32.ge_u
-     if
-      local.get $9
-      i64.const 63
-      i64.shr_u
-      i64.const 0
-      i64.ne
-      if (result f64)
-       local.get $12
-       local.set $41
-       local.get $41
-       local.set $42
-       i64.const 1152921504606846976
-       f64.reinterpret_i64
-       local.set $16
-       local.get $16
-       f64.neg
-       local.get $16
-       local.get $42
-       select
-       local.get $16
-       f64.mul
-      else
-       local.get $12
-       local.set $42
-       local.get $42
-       local.set $41
-       i64.const 8070450532247928832
-       f64.reinterpret_i64
-       local.set $17
-       local.get $17
-       f64.neg
-       local.get $17
-       local.get $41
-       select
-       local.get $17
-       f64.mul
-      end
-      br $~lib/util/math/exp_inline|inlined.0
-     end
-     i32.const 0
-     local.set $39
+     f64.const 1
+     return
     end
-    f64.const 184.6649652337873
-    local.get $15
+    local.get $6
+    i64.const 2047
+    i64.and
+    i64.const 958
+    i64.lt_u
+    if
+     f64.const 1
+     return
+    end
+    local.get $3
+    i64.const 4607182418800017408
+    i64.gt_u
+    local.get $6
+    i64.const 2048
+    i64.lt_u
+    i32.eq
+    if (result f64)
+     f64.const inf
+    else
+     f64.const 0
+    end
+    return
+   end
+   local.get $5
+   i64.const 0
+   i64.eq
+   if
+    local.get $0
+    f64.const 4503599627370496
     f64.mul
-    local.set $29
-    local.get $29
-    f64.const 6755399441055744
-    f64.add
-    local.set $30
-    local.get $30
     i64.reinterpret_f64
-    local.set $14
-    local.get $30
-    f64.const 6755399441055744
-    f64.sub
-    local.set $30
-    local.get $15
-    local.get $30
-    f64.const -0.005415212348111709
-    f64.mul
-    f64.add
-    local.get $30
-    f64.const -1.2864023111638346e-14
-    f64.mul
-    f64.add
-    local.set $28
-    local.get $28
-    local.get $10
-    f64.add
-    local.set $28
-    local.get $14
-    i64.const 127
+    local.set $3
+    local.get $3
+    i64.const 9223372036854775807
     i64.and
-    i64.const 1
-    i64.shl
-    i32.wrap_i64
-    local.set $40
-    local.get $14
-    local.get $12
-    i64.extend_i32_u
-    i64.add
+    local.set $3
+    local.get $3
+    i64.const 52
     i64.const 52
-    i64.const 7
-    i64.sub
     i64.shl
-    local.set $13
-    i32.const 4184
-    local.get $40
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load
-    f64.reinterpret_i64
-    local.set $25
-    i32.const 4184
-    local.get $40
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load offset=8
-    local.get $13
-    i64.add
-    local.set $11
-    local.get $28
-    local.get $28
-    f64.mul
-    local.set $27
-    local.get $25
-    local.get $28
-    f64.add
-    local.get $27
-    f64.const 0.49999999999996786
-    local.get $28
-    f64.const 0.16666666666665886
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.get $27
-    local.get $27
-    f64.mul
-    f64.const 0.0416666808410674
-    local.get $28
-    f64.const 0.008333335853059549
-    f64.mul
-    f64.add
-    f64.mul
-    f64.add
-    local.set $24
-    local.get $39
-    i32.const 0
-    i32.eq
-    if
-     block $~lib/util/math/specialcase|inlined.0 (result f64)
-      local.get $24
-      local.set $18
-      local.get $11
-      local.set $44
-      local.get $14
-      local.set $43
-      local.get $43
-      i64.const 2147483648
-      i64.and
-      i64.const 0
-      i64.ne
-      i32.eqz
-      if
-       local.get $44
-       i64.const 1009
-       i64.const 52
-       i64.shl
-       i64.sub
-       local.set $44
-       local.get $44
-       f64.reinterpret_i64
-       local.set $17
-       f64.const 5486124068793688683255936e279
-       local.get $17
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       f64.mul
-       br $~lib/util/math/specialcase|inlined.0
-      end
-      local.get $44
-      i64.const 1022
-      i64.const 52
-      i64.shl
-      i64.add
-      local.set $44
-      local.get $44
-      f64.reinterpret_i64
-      local.set $17
-      local.get $17
-      local.get $17
-      local.get $18
-      f64.mul
-      f64.add
-      local.set $16
-      local.get $16
-      f64.abs
-      f64.const 1
-      f64.lt
-      if
-       f64.const 1
-       local.get $16
-       f64.copysign
-       local.set $23
-       local.get $17
-       local.get $16
-       f64.sub
-       local.get $17
-       local.get $18
-       f64.mul
-       f64.add
-       local.set $22
-       local.get $23
-       local.get $16
-       f64.add
-       local.set $21
-       local.get $23
-       local.get $21
-       f64.sub
-       local.get $16
-       f64.add
-       local.get $22
-       f64.add
-       local.set $22
-       local.get $21
-       local.get $22
-       f64.add
-       local.get $23
-       f64.sub
-       local.set $16
-       local.get $16
-       f64.const 0
-       f64.eq
-       if
-        local.get $44
-        i64.const -9223372036854775808
-        i64.and
-        f64.reinterpret_i64
-        local.set $16
-       end
-      end
-      local.get $16
-      f64.const 2.2250738585072014e-308
-      f64.mul
-     end
-     br $~lib/util/math/exp_inline|inlined.0
-    end
-    local.get $11
-    f64.reinterpret_i64
-    local.set $26
-    local.get $26
-    local.get $26
-    local.get $24
+    i64.sub
+    local.set $3
+   end
+  end
+  local.get $3
+  call $~lib/util/math/log_inline
+  local.set $9
+  global.get $~lib/util/math/log_tail
+  local.set $10
+  local.get $4
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $13
+  local.get $1
+  local.get $13
+  f64.sub
+  local.set $14
+  local.get $9
+  i64.reinterpret_f64
+  i64.const -134217728
+  i64.and
+  f64.reinterpret_i64
+  local.set $15
+  local.get $9
+  local.get $15
+  f64.sub
+  local.get $10
+  f64.add
+  local.set $16
+  local.get $13
+  local.get $15
+  f64.mul
+  local.set $11
+  local.get $14
+  local.get $15
+  f64.mul
+  local.get $1
+  local.get $16
+  f64.mul
+  f64.add
+  local.set $12
+  local.get $11
+  local.get $12
+  local.get $2
+  call $~lib/util/math/exp_inline
+ )
+ (func $~lib/math/NativeMath.pow (param $0 f64) (param $1 f64) (result f64)
+  local.get $1
+  f64.abs
+  f64.const 2
+  f64.le
+  if
+   local.get $1
+   f64.const 2
+   f64.eq
+   if
+    local.get $0
+    local.get $0
     f64.mul
-    f64.add
+    return
+   end
+   local.get $1
+   f64.const 0.5
+   f64.eq
+   if
+    local.get $0
+    f64.sqrt
+    f64.abs
+    f64.const inf
+    local.get $0
+    f64.const inf
+    f64.neg
+    f64.ne
+    select
+    return
+   end
+   local.get $1
+   f64.const -1
+   f64.eq
+   if
+    f64.const 1
+    local.get $0
+    f64.div
+    return
+   end
+   local.get $1
+   f64.const 1
+   f64.eq
+   if
+    local.get $0
+    return
+   end
+   local.get $1
+   f64.const 0
+   f64.eq
+   if
+    f64.const 1
+    return
    end
   end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $0
+  local.get $1
+  call $~lib/util/math/pow_lut
   return
  )
  (func $std/operator-overloading/Tester.pow (param $0 i32) (param $1 i32) (result i32)
diff --git a/tests/compiler/std/pointer.optimized.wat b/tests/compiler/std/pointer.optimized.wat
index 28130fa71a..318cec91ef 100644
--- a/tests/compiler/std/pointer.optimized.wat
+++ b/tests/compiler/std/pointer.optimized.wat
@@ -13,86 +13,44 @@
  (global $std/pointer/buf (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   i32.const 8
-   local.set $4
-   local.get $0
+  i32.const 8
+  local.set $4
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
       local.get $4
-      i32.const 8
-      i32.ge_u
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $4
+      i32.const 1
+      i32.sub
+      local.set $4
       local.get $0
       local.tee $2
       i32.const 1
@@ -107,84 +65,130 @@
       local.get $3
       i32.load8_u
       i32.store8
+      br $while-continue|0
+     end
+    end
+    loop $while-continue|1
+     local.get $4
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
       local.get $4
-      i32.const 1
+      i32.const 8
       i32.sub
       local.set $4
-      br $while-continue|2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
+   end
+   loop $while-continue|2
+    local.get $4
     if
-     loop $while-continue|3
-      local.get $0
+     local.get $0
+     local.tee $2
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $2
+     local.get $3
+     i32.load8_u
+     i32.store8
+     local.get $4
+     i32.const 1
+     i32.sub
+     local.set $4
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $4
+     i32.add
+     i32.const 7
+     i32.and
+     if
       local.get $4
-      i32.add
-      i32.const 7
-      i32.and
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
+       return
       end
-     end
-     loop $while-continue|4
+      local.get $0
       local.get $4
-      i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.const 1
+      i32.sub
+      local.tee $4
+      i32.add
+      local.get $1
+      local.get $4
+      i32.add
+      i32.load8_u
+      i32.store8
+      br $while-continue|3
      end
     end
-    loop $while-continue|5
+    loop $while-continue|4
      local.get $4
+     i32.const 8
+     i32.ge_u
      if
       local.get $0
       local.get $4
-      i32.const 1
+      i32.const 8
       i32.sub
       local.tee $4
       i32.add
       local.get $1
       local.get $4
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $4
+    if
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.sub
+     local.tee $4
+     i32.add
+     local.get $1
+     local.get $4
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $start:std/pointer
@@ -354,7 +358,7 @@
   if
    local.get $0
    local.get $1
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   else
    local.get $0
    i32.const 0
diff --git a/tests/compiler/std/pointer.untouched.wat b/tests/compiler/std/pointer.untouched.wat
index c91702a279..7db5b3db9c 100644
--- a/tests/compiler/std/pointer.untouched.wat
+++ b/tests/compiler/std/pointer.untouched.wat
@@ -23,219 +23,214 @@
  (func $~lib/rt/stub/__release (param $0 i32)
   nop
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
    local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
    if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -1260,238 +1255,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $start:std/pointer
   (local $0 i32)
   (local $1 i32)
diff --git a/tests/compiler/std/set.optimized.wat b/tests/compiler/std/set.optimized.wat
index ec63d08717..c94042df4d 100644
--- a/tests/compiler/std/set.optimized.wat
+++ b/tests/compiler/std/set.optimized.wat
@@ -1,22 +1,22 @@
 (module
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $i32_i64_=>_i32 (func (param i32 i64) (result i32)))
- (type $i32_f32_=>_i32 (func (param i32 f32) (result i32)))
- (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_i64_=>_none (func (param i32 i32 i64)))
  (type $i32_i64_=>_none (func (param i32 i64)))
  (type $i32_f32_=>_none (func (param i32 f32)))
  (type $i32_f64_=>_none (func (param i32 f64)))
+ (type $i32_i64_=>_i32 (func (param i32 i64) (result i32)))
  (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32)))
+ (type $i32_f32_=>_i32 (func (param i32 f32) (result i32)))
  (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
+ (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
@@ -41,6 +41,31 @@
  (global $~lib/rt/tlsf/collectLock (mut i32) (i32.const 0))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -55,7 +80,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -77,7 +102,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -96,23 +121,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -120,61 +145,53 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -182,9 +199,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -193,7 +208,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -216,7 +231,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -230,7 +245,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -243,9 +258,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -254,7 +269,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -263,7 +278,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -281,9 +296,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -303,7 +318,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -336,8 +351,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -358,27 +373,27 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1040
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -407,13 +422,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -421,21 +436,15 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -450,31 +459,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -504,7 +510,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -521,7 +527,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -549,7 +555,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -601,7 +607,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -622,7 +628,8 @@
     unreachable
    end
    i32.const 1456
-   local.tee $0
+   local.set $2
+   i32.const 1456
    i32.const 0
    i32.store
    i32.const 3024
@@ -641,27 +648,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1456
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -681,7 +682,7 @@
    i32.const 1456
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -690,7 +691,7 @@
   if
    i32.const 1088
    i32.const 1040
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -709,6 +710,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -718,23 +720,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -763,7 +764,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -781,16 +782,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -811,26 +806,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1040
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -848,7 +839,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -893,13 +884,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -919,7 +911,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1010,7 +1002,7 @@
     if
      i32.const 0
      i32.const 1040
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1026,7 +1018,7 @@
   if
    i32.const 0
    i32.const 1040
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1051,14 +1043,6 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -1110,161 +1094,171 @@
   end
   local.get $0
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
   (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -1281,34 +1275,35 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
   local.get $0
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $1
   call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/pure/__release (param $0 i32)
+ (func $~lib/set/Set<i8>#clear (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 16
+  call $~lib/arraybuffer/ArrayBuffer#constructor
+  local.set $1
   local.get $0
+  i32.load
+  local.tee $2
   i32.const 1444
   i32.gt_u
   if
-   local.get $0
+   local.get $2
    i32.const 16
    i32.sub
    call $~lib/rt/pure/decrement
   end
- )
- (func $~lib/set/Set<i8>#clear (param $0 i32)
-  (local $1 i32)
-  i32.const 16
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
-  local.get $0
-  i32.load
-  call $~lib/rt/pure/__release
   local.get $0
   local.get $1
   i32.store
@@ -1320,7 +1315,15 @@
   local.set $1
   local.get $0
   i32.load offset=8
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store offset=8
@@ -1336,9 +1339,12 @@
  )
  (func $~lib/set/Set<i8>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -1362,13 +1368,6 @@
   call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/util/hash/hash8 (param $0 i32) (result i32)
-  local.get $0
-  i32.const -2128831035
-  i32.xor
-  i32.const 16777619
-  i32.mul
- )
  (func $~lib/set/Set<i8>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   i32.load
@@ -1412,19 +1411,6 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<i8>#has (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i32.const 24
-  i32.shl
-  i32.const 24
-  i32.shr_s
-  call $~lib/util/hash/hash8
-  call $~lib/set/Set<i8>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/set/Set<i8>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -1436,139 +1422,171 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $6
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  local.set $5
+  local.get $2
+  local.set $3
   loop $while-continue|0
-   local.get $6
-   local.get $7
+   local.get $5
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      i32.load8_s
      i32.store8
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
-     i32.load8_s
-     call $~lib/util/hash/hash8
      local.get $1
+     local.get $8
+     i32.load8_s
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      i32.and
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $7
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $4
+     local.get $7
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 8
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 8
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $7
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $7
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $7
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
-  local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.tee $1
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $8
+  local.get $0
+  local.get $6
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<i8>#add (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 24
   i32.shl
   i32.const 24
   i32.shr_s
-  call $~lib/util/hash/hash8
-  local.tee $3
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $2
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<i8>#find
   i32.eqz
   if
@@ -1643,177 +1661,258 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/array/Array<i8>#constructor (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  i32.const 1073741808
+  i32.gt_u
+  if
+   i32.const 1200
+   i32.const 1360
+   i32.const 57
+   i32.const 60
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $0
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 16
+  i32.const 4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  i32.const 0
+  i32.store
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  i32.const 0
+  i32.store offset=8
+  local.get $3
+  i32.const 0
+  i32.store offset=12
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
+  i32.load
+  local.tee $4
+  i32.ne
+  if
    local.get $2
-   local.set $4
-   local.get $0
+   call $~lib/rt/pure/__retain
+   local.set $2
+   local.get $4
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $3
+  local.get $2
+  i32.store
+  local.get $3
+  local.get $1
+  i32.store offset=4
+  local.get $3
+  local.get $0
+  i32.store offset=8
+  local.get $3
+  local.get $0
+  i32.store offset=12
+  local.get $3
+ )
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
-     end
-     loop $while-continue|1
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $3
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $3
       local.get $4
-      i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
-      end
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
      end
     end
-    loop $while-continue|2
-     local.get $4
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
      if
       local.get $0
-      local.tee $2
-      i32.const 1
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
+     end
+    end
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
+      i32.sub
+      local.tee $2
       i32.add
-      local.set $1
+      local.get $1
       local.get $2
-      local.get $3
+      i32.add
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|3
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
-      i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.get $2
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
-     end
-    end
-    loop $while-continue|5
-     local.get $4
-     if
-      local.get $4
-      i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
@@ -1862,7 +1961,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -1885,10 +1986,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -1918,7 +2019,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 1444
   i32.ge_u
@@ -1995,7 +2096,7 @@
    if
     i32.const 0
     i32.const 1040
-    i32.const 581
+    i32.const 573
     i32.const 3
     call $~lib/builtins/abort
     unreachable
@@ -2014,7 +2115,7 @@
    local.get $2
    local.get $5
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
    local.get $1
    local.get $3
    i32.ne
@@ -2079,118 +2180,6 @@
   local.get $1
   i32.store offset=12
  )
- (func $~lib/set/Set<i8>#values (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
-  local.get $0
-  i32.load offset=16
-  local.tee $4
-  local.tee $8
-  i32.const 1073741808
-  i32.gt_u
-  if
-   i32.const 1200
-   i32.const 1360
-   i32.const 57
-   i32.const 60
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $8
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $8
-  call $~lib/memory/memory.fill
-  i32.const 16
-  i32.const 4
-  call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/pure/__retain
-  local.tee $0
-  i32.const 0
-  i32.store
-  local.get $0
-  i32.const 0
-  i32.store offset=4
-  local.get $0
-  i32.const 0
-  i32.store offset=8
-  local.get $0
-  i32.const 0
-  i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
-  i32.load
-  local.tee $3
-  i32.ne
-  if
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
-  end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=4
-  local.get $0
-  local.get $8
-  i32.store offset=8
-  local.get $0
-  local.get $8
-  i32.store offset=12
-  loop $for-loop|0
-   local.get $6
-   local.get $4
-   i32.lt_s
-   if
-    local.get $5
-    local.get $6
-    i32.const 3
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=4
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $7
-     local.get $2
-     i32.load8_s
-     call $~lib/array/Array<i8>#__set
-     local.get $7
-     i32.const 1
-     i32.add
-     local.set $7
-    end
-    local.get $6
-    i32.const 1
-    i32.add
-    local.set $6
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $7
-  call $~lib/array/Array<i8>#set:length
-  local.get $0
- )
  (func $~lib/array/Array<i8>#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
@@ -2219,7 +2208,10 @@
   i32.shl
   i32.const 24
   i32.shr_s
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/set/Set<i8>#find
   local.tee $1
   i32.eqz
@@ -2278,6 +2270,10 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
   call $~lib/set/Set<i8>#constructor
   local.set $0
   loop $for-loop|1
@@ -2291,7 +2287,16 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<i8>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -2303,10 +2308,27 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<i8>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<i8>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -2348,7 +2370,16 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<i8>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -2361,10 +2392,27 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<i8>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<i8>#has
+    local.get $2
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -2374,28 +2422,71 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $2
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|3
+   end
+  end
+  local.get $0
+  i32.load offset=20
+  i32.const 100
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 18
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $5
+  local.get $0
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<i8>#constructor
+  local.set $2
+  loop $for-loop|0
+   local.get $4
+   local.get $6
+   i32.lt_s
+   if
+    local.get $5
+    local.get $4
+    i32.const 3
+    i32.shl
+    i32.add
+    local.tee $7
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $2
+     local.get $3
+     local.get $7
+     i32.load8_s
+     call $~lib/array/Array<i8>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $4
     i32.const 1
     i32.add
-    local.set $2
-    br $for-loop|3
+    local.set $4
+    br $for-loop|0
    end
   end
-  local.get $0
-  i32.load offset=20
-  i32.const 100
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 18
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  call $~lib/set/Set<i8>#values
-  local.set $2
+  local.get $2
+  local.get $3
+  call $~lib/array/Array<i8>#set:length
   call $~lib/set/Set<i8>#constructor
   local.set $3
   loop $for-loop|4
@@ -2404,11 +2495,23 @@
    i32.load offset=12
    i32.lt_s
    if
-    local.get $0
     local.get $2
     local.get $1
     call $~lib/array/Array<i8>#__get
-    call $~lib/set/Set<i8>#has
+    local.tee $4
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    local.set $5
+    local.get $0
+    local.get $4
+    local.get $5
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -2423,7 +2526,15 @@
     local.get $1
     call $~lib/array/Array<i8>#__get
     call $~lib/set/Set<i8>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     i32.const 1
     i32.add
@@ -2457,7 +2568,16 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<i8>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -2472,7 +2592,16 @@
     call $~lib/set/Set<i8>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<i8>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -2513,7 +2642,16 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<i8>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -2525,10 +2663,27 @@
     local.get $0
     local.get $1
     call $~lib/set/Set<i8>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/set/Set<i8>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -2543,7 +2698,16 @@
     call $~lib/set/Set<i8>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<i8>#has
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -2584,17 +2748,41 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<u8>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -2618,17 +2806,6 @@
   call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/set/Set<u8>#has (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i32.const 255
-  i32.and
-  call $~lib/util/hash/hash8
-  call $~lib/set/Set<i8>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/set/Set<u8>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -2640,137 +2817,169 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $6
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  local.set $5
+  local.get $2
+  local.set $3
   loop $while-continue|0
-   local.get $6
-   local.get $7
+   local.get $5
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      i32.load8_u
      i32.store8
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
-     i32.load8_u
-     call $~lib/util/hash/hash8
      local.get $1
+     local.get $8
+     i32.load8_u
+     i32.const -2128831035
+     i32.xor
+     i32.const 16777619
+     i32.mul
      i32.and
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $7
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $4
+     local.get $7
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 8
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 8
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $7
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $7
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $7
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
-  local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.tee $1
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $8
+  local.get $0
+  local.get $6
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<u8>#add (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 255
   i32.and
-  call $~lib/util/hash/hash8
-  local.tee $3
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
+  local.tee $2
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<i8>#find
   i32.eqz
   if
@@ -2845,22 +3054,12 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $~lib/set/Set<u8>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<u8>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
   local.get $0
-  i32.load offset=16
-  local.tee $4
-  local.tee $8
   i32.const 1073741808
   i32.gt_u
   if
@@ -2871,91 +3070,68 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $8
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $8
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $0
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $4
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $4
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
+  local.get $3
   local.get $0
-  local.get $8
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $8
   i32.store offset=12
-  loop $for-loop|0
-   local.get $6
-   local.get $4
-   i32.lt_s
-   if
-    local.get $5
-    local.get $6
-    i32.const 3
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=4
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $7
-     local.get $2
-     i32.load8_u
-     call $~lib/array/Array<i8>#__set
-     local.get $7
-     i32.const 1
-     i32.add
-     local.set $7
-    end
-    local.get $6
-    i32.const 1
-    i32.add
-    local.set $6
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $7
-  call $~lib/array/Array<i8>#set:length
-  local.get $0
+  local.get $3
  )
  (func $~lib/array/Array<u8>#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -2983,7 +3159,10 @@
   local.get $1
   i32.const 255
   i32.and
-  call $~lib/util/hash/hash8
+  i32.const -2128831035
+  i32.xor
+  i32.const 16777619
+  i32.mul
   call $~lib/set/Set<i8>#find
   local.tee $1
   i32.eqz
@@ -3042,6 +3221,10 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
   call $~lib/set/Set<u8>#constructor
   local.set $0
   loop $for-loop|1
@@ -3053,7 +3236,14 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<u8>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -3065,10 +3255,25 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<u8>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<u8>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -3108,7 +3313,14 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<u8>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -3121,10 +3333,25 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<u8>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<u8>#has
+    local.get $2
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -3153,9 +3380,52 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $5
   local.get $0
-  call $~lib/set/Set<u8>#values
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<u8>#constructor
   local.set $2
+  loop $for-loop|0
+   local.get $4
+   local.get $6
+   i32.lt_s
+   if
+    local.get $5
+    local.get $4
+    i32.const 3
+    i32.shl
+    i32.add
+    local.tee $7
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $2
+     local.get $3
+     local.get $7
+     i32.load8_u
+     call $~lib/array/Array<i8>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|0
+   end
+  end
+  local.get $2
+  local.get $3
+  call $~lib/array/Array<i8>#set:length
   call $~lib/set/Set<u8>#constructor
   local.set $3
   loop $for-loop|4
@@ -3164,11 +3434,21 @@
    i32.load offset=12
    i32.lt_s
    if
-    local.get $0
     local.get $2
     local.get $1
     call $~lib/array/Array<u8>#__get
-    call $~lib/set/Set<u8>#has
+    local.tee $4
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    local.set $5
+    local.get $0
+    local.get $4
+    local.get $5
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -3183,7 +3463,15 @@
     local.get $1
     call $~lib/array/Array<u8>#__get
     call $~lib/set/Set<u8>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     i32.const 1
     i32.add
@@ -3215,7 +3503,14 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<u8>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -3230,7 +3525,14 @@
     call $~lib/set/Set<u8>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<u8>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -3269,7 +3571,14 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<u8>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -3281,10 +3590,25 @@
     local.get $0
     local.get $1
     call $~lib/set/Set<u8>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/set/Set<u8>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     i32.eqz
     if
      i32.const 0
@@ -3299,7 +3623,14 @@
     call $~lib/set/Set<u8>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<u8>#has
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.const -2128831035
+    i32.xor
+    i32.const 16777619
+    i32.mul
+    call $~lib/set/Set<i8>#find
     if
      i32.const 0
      i32.const 1312
@@ -3340,17 +3671,41 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<i16>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -3456,51 +3811,50 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $7
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  local.set $6
+  local.get $2
+  local.set $3
   loop $while-continue|0
    local.get $6
-   local.get $7
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      i32.load16_s
      i32.store16
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
+     local.get $8
      i32.load16_s
      call $~lib/util/hash/hash16
      local.get $1
@@ -3508,87 +3862,115 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $5
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $4
+     local.get $5
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 8
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 8
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $8
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $8
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $8
+  local.get $0
+  local.get $7
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<i16>#add (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 16
   i32.shl
   i32.const 16
   i32.shr_s
   call $~lib/util/hash/hash16
-  local.tee $3
+  local.tee $2
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<i16>#find
   i32.eqz
   if
@@ -3663,74 +4045,13 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<i16>#__set (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  local.get $1
-  local.get $0
-  i32.load offset=12
-  i32.ge_u
-  if
-   local.get $1
-   i32.const 0
-   i32.lt_s
-   if
-    i32.const 1408
-    i32.const 1360
-    i32.const 120
-    i32.const 22
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   local.get $1
-   i32.const 1
-   i32.add
-   local.tee $3
-   i32.const 1
-   call $~lib/array/ensureSize
-   local.get $0
-   local.get $3
-   i32.store offset=12
-  end
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 1
-  i32.shl
-  i32.add
-  local.get $2
-  i32.store16
- )
- (func $~lib/array/Array<i16>#set:length (param $0 i32) (param $1 i32)
-  local.get $0
-  i32.load offset=12
-  drop
-  local.get $0
-  local.get $1
-  i32.const 1
-  call $~lib/array/ensureSize
-  local.get $0
-  local.get $1
-  i32.store offset=12
- )
- (func $~lib/set/Set<i16>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<i16>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
   local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 536870904
   i32.gt_u
   if
@@ -3741,94 +4062,121 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 1
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 8
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $5
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $6
   i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
+  local.get $3
+ )
+ (func $~lib/array/Array<i16>#__set (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  local.get $1
+  local.get $0
+  i32.load offset=12
+  i32.ge_u
+  if
+   local.get $1
+   i32.const 0
    i32.lt_s
    if
-    local.get $4
-    local.get $8
-    i32.const 3
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=4
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i32.load16_s
-     call $~lib/array/Array<i16>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
+    i32.const 1408
+    i32.const 1360
+    i32.const 120
+    i32.const 22
+    call $~lib/builtins/abort
+    unreachable
    end
+   local.get $0
+   local.get $1
+   i32.const 1
+   i32.add
+   local.tee $3
+   i32.const 1
+   call $~lib/array/ensureSize
+   local.get $0
+   local.get $3
+   i32.store offset=12
   end
   local.get $0
-  local.get $9
-  call $~lib/array/Array<i16>#set:length
+  i32.load offset=4
+  local.get $1
+  i32.const 1
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store16
+ )
+ (func $~lib/array/Array<i16>#set:length (param $0 i32) (param $1 i32)
+  local.get $0
+  i32.load offset=12
+  drop
+  local.get $0
+  local.get $1
+  i32.const 1
+  call $~lib/array/ensureSize
   local.get $0
+  local.get $1
+  i32.store offset=12
  )
  (func $~lib/array/Array<i16>#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -3919,10 +4267,14 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
   call $~lib/set/Set<i16>#constructor
   local.set $0
   loop $for-loop|1
-   local.get $2
+   local.get $1
    i32.const 16
    i32.shl
    i32.const 16
@@ -3931,7 +4283,7 @@
    i32.lt_s
    if
     local.get $0
-    local.get $2
+    local.get $1
     call $~lib/set/Set<i16>#has
     if
      i32.const 0
@@ -3942,11 +4294,19 @@
      unreachable
     end
     local.get $0
-    local.get $2
+    local.get $1
     call $~lib/set/Set<i16>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
-    local.get $2
+    local.get $1
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
@@ -3957,10 +4317,10 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $2
+    local.get $1
     i32.const 1
     i32.add
-    local.set $2
+    local.set $1
     br $for-loop|1
    end
   end
@@ -3977,9 +4337,9 @@
    unreachable
   end
   i32.const 50
-  local.set $2
+  local.set $1
   loop $for-loop|3
-   local.get $2
+   local.get $1
    i32.const 16
    i32.shl
    i32.const 16
@@ -3988,7 +4348,7 @@
    i32.lt_s
    if
     local.get $0
-    local.get $2
+    local.get $1
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
@@ -4000,11 +4360,19 @@
      unreachable
     end
     local.get $0
-    local.get $2
+    local.get $1
     call $~lib/set/Set<i16>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
-    local.get $2
+    local.get $1
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
@@ -4015,10 +4383,10 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $2
+    local.get $1
     i32.const 1
     i32.add
-    local.set $2
+    local.set $1
     br $for-loop|3
    end
   end
@@ -4034,20 +4402,63 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
   local.get $0
-  call $~lib/set/Set<i16>#values
-  local.set $2
+  i32.load offset=8
+  local.set $5
+  local.get $0
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<i16>#constructor
+  local.set $1
+  loop $for-loop|0
+   local.get $4
+   local.get $6
+   i32.lt_s
+   if
+    local.get $5
+    local.get $4
+    i32.const 3
+    i32.shl
+    i32.add
+    local.tee $7
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $1
+     local.get $3
+     local.get $7
+     i32.load16_s
+     call $~lib/array/Array<i16>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|0
+   end
+  end
+  local.get $1
+  local.get $3
+  call $~lib/array/Array<i16>#set:length
   call $~lib/set/Set<i16>#constructor
   local.set $3
   loop $for-loop|4
-   local.get $1
    local.get $2
+   local.get $1
    i32.load offset=12
    i32.lt_s
    if
     local.get $0
-    local.get $2
     local.get $1
+    local.get $2
     call $~lib/array/Array<i16>#__get
     call $~lib/set/Set<i16>#has
     i32.eqz
@@ -4060,15 +4471,23 @@
      unreachable
     end
     local.get $3
-    local.get $2
     local.get $1
+    local.get $2
     call $~lib/array/Array<i16>#__get
     call $~lib/set/Set<i16>#add
-    call $~lib/rt/pure/__release
-    local.get $1
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|4
    end
   end
@@ -4086,9 +4505,9 @@
    unreachable
   end
   i32.const 0
-  local.set $1
+  local.set $2
   loop $for-loop|6
-   local.get $1
+   local.get $2
    i32.const 16
    i32.shl
    i32.const 16
@@ -4097,7 +4516,7 @@
    i32.lt_s
    if
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
@@ -4109,10 +4528,10 @@
      unreachable
     end
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#delete
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#has
     if
      i32.const 0
@@ -4122,10 +4541,10 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|6
    end
   end
@@ -4142,9 +4561,9 @@
    unreachable
   end
   i32.const 0
-  local.set $1
+  local.set $2
   loop $for-loop|8
-   local.get $1
+   local.get $2
    i32.const 16
    i32.shl
    i32.const 16
@@ -4153,7 +4572,7 @@
    i32.lt_s
    if
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#has
     if
      i32.const 0
@@ -4164,11 +4583,19 @@
      unreachable
     end
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#has
     i32.eqz
     if
@@ -4180,10 +4607,10 @@
      unreachable
     end
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#delete
     local.get $0
-    local.get $1
+    local.get $2
     call $~lib/set/Set<i16>#has
     if
      i32.const 0
@@ -4193,10 +4620,10 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $1
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|8
    end
   end
@@ -4224,18 +4651,42 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  call $~lib/rt/pure/__release
+  local.get $1
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<u16>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 9
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -4259,17 +4710,6 @@
   call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/set/Set<u16>#has (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i32.const 65535
-  i32.and
-  call $~lib/util/hash/hash16
-  call $~lib/set/Set<i16>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/set/Set<u16>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -4281,51 +4721,50 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $7
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  local.set $6
+  local.get $2
+  local.set $3
   loop $while-continue|0
    local.get $6
-   local.get $7
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      i32.load16_u
      i32.store16
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
+     local.get $8
      i32.load16_u
      call $~lib/util/hash/hash16
      local.get $1
@@ -4333,85 +4772,113 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $5
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $4
+     local.get $5
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 8
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 8
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $8
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $8
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $8
+  local.get $0
+  local.get $7
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<u16>#add (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.const 65535
   i32.and
   call $~lib/util/hash/hash16
-  local.tee $3
+  local.tee $2
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<i16>#find
   i32.eqz
   if
@@ -4486,24 +4953,13 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $~lib/set/Set<u16>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<u16>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
   local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 536870904
   i32.gt_u
   if
@@ -4514,94 +4970,71 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 1
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 10
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $5
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $6
   i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 3
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=4
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i32.load16_u
-     call $~lib/array/Array<i16>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i16>#set:length
-  local.get $0
+  local.get $3
  )
  (func $~lib/array/Array<u16>#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -4690,6 +5123,10 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
   call $~lib/set/Set<u16>#constructor
   local.set $0
   loop $for-loop|1
@@ -4701,7 +5138,11 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<u16>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     if
      i32.const 0
      i32.const 1312
@@ -4713,10 +5154,22 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<u16>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<u16>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     i32.eqz
     if
      i32.const 0
@@ -4756,7 +5209,11 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<u16>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     i32.eqz
     if
      i32.const 0
@@ -4769,41 +5226,96 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<u16>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<u16>#has
+    local.get $2
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
+    i32.eqz
+    if
+     i32.const 0
+     i32.const 1312
+     i32.const 16
+     i32.const 5
+     call $~lib/builtins/abort
+     unreachable
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|3
+   end
+  end
+  local.get $0
+  i32.load offset=20
+  i32.const 100
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 18
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $5
+  local.get $0
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<u16>#constructor
+  local.set $2
+  loop $for-loop|0
+   local.get $4
+   local.get $6
+   i32.lt_s
+   if
+    local.get $5
+    local.get $4
+    i32.const 3
+    i32.shl
+    i32.add
+    local.tee $7
+    i32.load offset=4
+    i32.const 1
+    i32.and
     i32.eqz
     if
-     i32.const 0
-     i32.const 1312
-     i32.const 16
-     i32.const 5
-     call $~lib/builtins/abort
-     unreachable
+     local.get $2
+     local.get $3
+     local.get $7
+     i32.load16_u
+     call $~lib/array/Array<i16>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
     end
-    local.get $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $2
-    br $for-loop|3
+    local.set $4
+    br $for-loop|0
    end
   end
-  local.get $0
-  i32.load offset=20
-  i32.const 100
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 18
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  call $~lib/set/Set<u16>#values
-  local.set $2
+  local.get $2
+  local.get $3
+  call $~lib/array/Array<i16>#set:length
   call $~lib/set/Set<u16>#constructor
   local.set $3
   loop $for-loop|4
@@ -4816,7 +5328,12 @@
     local.get $2
     local.get $1
     call $~lib/array/Array<u16>#__get
-    call $~lib/set/Set<u16>#has
+    local.tee $4
+    local.get $4
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     i32.eqz
     if
      i32.const 0
@@ -4831,7 +5348,15 @@
     local.get $1
     call $~lib/array/Array<u16>#__get
     call $~lib/set/Set<u16>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     i32.const 1
     i32.add
@@ -4863,7 +5388,11 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<u16>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     i32.eqz
     if
      i32.const 0
@@ -4878,7 +5407,11 @@
     call $~lib/set/Set<u16>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<u16>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     if
      i32.const 0
      i32.const 1312
@@ -4917,7 +5450,11 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<u16>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     if
      i32.const 0
      i32.const 1312
@@ -4929,10 +5466,22 @@
     local.get $0
     local.get $1
     call $~lib/set/Set<u16>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/set/Set<u16>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     i32.eqz
     if
      i32.const 0
@@ -4947,7 +5496,11 @@
     call $~lib/set/Set<u16>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<u16>#has
+    local.get $1
+    i32.const 65535
+    i32.and
+    call $~lib/util/hash/hash16
+    call $~lib/set/Set<i16>#find
     if
      i32.const 0
      i32.const 1312
@@ -4988,17 +5541,41 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<i32>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 11
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -5094,15 +5671,6 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<i32>#has (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  call $~lib/util/hash/hash32
-  call $~lib/set/Set<i32>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/set/Set<i32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -5114,51 +5682,50 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $7
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  local.set $6
+  local.get $2
+  local.set $3
   loop $while-continue|0
    local.get $6
-   local.get $7
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      i32.load
      i32.store
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
+     local.get $8
      i32.load
      call $~lib/util/hash/hash32
      local.get $1
@@ -5166,73 +5733,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $5
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $4
+     local.get $5
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 8
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 8
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $8
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $8
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $8
+  local.get $0
+  local.get $7
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<i32>#add (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -5312,10 +5905,93 @@
    i32.store offset=4
    local.get $1
    local.get $2
-   i32.store
+   i32.store
+  end
+  local.get $0
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/array/Array<i32>#constructor (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.const 268435452
+  i32.gt_u
+  if
+   i32.const 1200
+   i32.const 1360
+   i32.const 57
+   i32.const 60
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
+  i32.const 2
+  i32.shl
+  local.tee $4
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 16
+  i32.const 12
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  i32.const 0
+  i32.store
+  local.get $3
+  i32.const 0
+  i32.store offset=4
+  local.get $3
+  i32.const 0
+  i32.store offset=8
+  local.get $3
+  i32.const 0
+  i32.store offset=12
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
+  i32.load
+  local.tee $5
+  i32.ne
+  if
+   local.get $2
+   call $~lib/rt/pure/__retain
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $3
+  local.get $2
+  i32.store
+  local.get $3
+  local.get $1
+  i32.store offset=4
+  local.get $3
+  local.get $4
+  i32.store offset=8
+  local.get $3
   local.get $0
-  call $~lib/rt/pure/__retain
+  i32.store offset=12
+  local.get $3
  )
  (func $~lib/array/Array<i32>#__set (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
@@ -5367,123 +6043,6 @@
   local.get $1
   i32.store offset=12
  )
- (func $~lib/set/Set<i32>#values (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
-  local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
-  i32.const 268435452
-  i32.gt_u
-  if
-   i32.const 1200
-   i32.const 1360
-   i32.const 57
-   i32.const 60
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $6
-  i32.const 2
-  i32.shl
-  local.tee $5
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
-  i32.const 16
-  i32.const 12
-  call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/pure/__retain
-  local.tee $0
-  i32.const 0
-  i32.store
-  local.get $0
-  i32.const 0
-  i32.store offset=4
-  local.get $0
-  i32.const 0
-  i32.store offset=8
-  local.get $0
-  i32.const 0
-  i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
-  i32.load
-  local.tee $3
-  i32.ne
-  if
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
-  end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=4
-  local.get $0
-  local.get $5
-  i32.store offset=8
-  local.get $0
-  local.get $6
-  i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 3
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=4
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i32.load
-     call $~lib/array/Array<i32>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i32>#set:length
-  local.get $0
- )
  (func $~lib/array/Array<i32>#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
   local.get $0
@@ -5569,6 +6128,10 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
   call $~lib/set/Set<i32>#constructor
   local.set $0
   loop $for-loop|0
@@ -5578,7 +6141,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -5590,10 +6155,20 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -5631,7 +6206,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -5644,10 +6221,20 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -5676,9 +6263,52 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $5
   local.get $0
-  call $~lib/set/Set<i32>#values
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<i32>#constructor
   local.set $2
+  loop $for-loop|00
+   local.get $4
+   local.get $6
+   i32.lt_s
+   if
+    local.get $5
+    local.get $4
+    i32.const 3
+    i32.shl
+    i32.add
+    local.tee $7
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $2
+     local.get $3
+     local.get $7
+     i32.load
+     call $~lib/array/Array<i32>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|00
+   end
+  end
+  local.get $2
+  local.get $3
+  call $~lib/array/Array<i32>#set:length
   call $~lib/set/Set<i32>#constructor
   local.set $3
   loop $for-loop|2
@@ -5691,7 +6321,10 @@
     local.get $2
     local.get $1
     call $~lib/array/Array<i32>#__get
-    call $~lib/set/Set<i32>#has
+    local.tee $4
+    local.get $4
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -5706,7 +6339,15 @@
     local.get $1
     call $~lib/array/Array<i32>#__get
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     i32.const 1
     i32.add
@@ -5736,7 +6377,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -5751,7 +6394,9 @@
     call $~lib/set/Set<i32>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -5788,7 +6433,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -5800,10 +6447,20 @@
     local.get $0
     local.get $1
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -5818,7 +6475,9 @@
     call $~lib/set/Set<i32>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -5859,17 +6518,41 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<u32>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 13
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -5893,24 +6576,13 @@
   call $~lib/set/Set<i8>#clear
   local.get $0
  )
- (func $~lib/set/Set<u32>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<u32>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
   local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 268435452
   i32.gt_u
   if
@@ -5921,100 +6593,81 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 2
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 14
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $5
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $6
   i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 3
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=4
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i32.load
-     call $~lib/array/Array<i32>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $9
-  call $~lib/array/Array<i32>#set:length
-  local.get $0
+  local.get $3
  )
  (func $std/set/testNumeric<u32>
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
   call $~lib/set/Set<u32>#constructor
   local.set $0
   loop $for-loop|0
@@ -6024,7 +6677,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -6036,10 +6691,20 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -6077,7 +6742,9 @@
    if
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -6090,10 +6757,20 @@
     local.get $0
     local.get $2
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $2
-    call $~lib/set/Set<i32>#has
+    local.get $2
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -6122,9 +6799,52 @@
    call $~lib/builtins/abort
    unreachable
   end
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $5
   local.get $0
-  call $~lib/set/Set<u32>#values
+  i32.load offset=16
+  local.tee $6
+  call $~lib/array/Array<u32>#constructor
   local.set $2
+  loop $for-loop|00
+   local.get $4
+   local.get $6
+   i32.lt_s
+   if
+    local.get $5
+    local.get $4
+    i32.const 3
+    i32.shl
+    i32.add
+    local.tee $7
+    i32.load offset=4
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $2
+     local.get $3
+     local.get $7
+     i32.load
+     call $~lib/array/Array<i32>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|00
+   end
+  end
+  local.get $2
+  local.get $3
+  call $~lib/array/Array<i32>#set:length
   call $~lib/set/Set<u32>#constructor
   local.set $3
   loop $for-loop|2
@@ -6137,7 +6857,10 @@
     local.get $2
     local.get $1
     call $~lib/array/Array<i32>#__get
-    call $~lib/set/Set<i32>#has
+    local.tee $4
+    local.get $4
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -6152,7 +6875,15 @@
     local.get $1
     call $~lib/array/Array<i32>#__get
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     i32.const 1
     i32.add
@@ -6182,7 +6913,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -6197,7 +6930,9 @@
     call $~lib/set/Set<i32>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -6234,7 +6969,9 @@
    if
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -6246,10 +6983,20 @@
     local.get $0
     local.get $1
     call $~lib/set/Set<i32>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     i32.eqz
     if
      i32.const 0
@@ -6264,7 +7011,9 @@
     call $~lib/set/Set<i32>#delete
     local.get $0
     local.get $1
-    call $~lib/set/Set<i32>#has
+    local.get $1
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<i32>#find
     if
      i32.const 0
      i32.const 1312
@@ -6305,20 +7054,50 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<i64>#clear (param $0 i32)
   (local $1 i32)
+  (local $2 i32)
   i32.const 16
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $1
   local.get $0
   i32.load
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store
@@ -6330,7 +7109,15 @@
   local.set $1
   local.get $0
   i32.load offset=8
-  call $~lib/rt/pure/__release
+  local.tee $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   local.get $1
   i32.store offset=8
@@ -6346,9 +7133,12 @@
  )
  (func $~lib/set/Set<i64>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 15
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -6479,15 +7269,6 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<i64>#has (param $0 i32) (param $1 i64) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  call $~lib/util/hash/hash64
-  call $~lib/set/Set<i64>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/set/Set<i64>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -6499,51 +7280,50 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $7
   i32.const 4
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 4
   i32.shl
-  i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  i32.add
+  local.set $6
+  local.get $2
+  local.set $3
   loop $while-continue|0
    local.get $6
-   local.get $7
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      i64.load
      i64.store
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
+     local.get $8
      i64.load
      call $~lib/util/hash/hash64
      local.get $1
@@ -6551,73 +7331,99 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $5
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $4
+     local.get $5
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 16
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 16
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $8
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $8
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $8
+  local.get $0
+  local.get $7
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<i64>#add (param $0 i32) (param $1 i64) (result i32)
   (local $2 i32)
@@ -6627,7 +7433,7 @@
   local.get $1
   local.get $1
   call $~lib/util/hash/hash64
-  local.tee $4
+  local.tee $3
   call $~lib/set/Set<i64>#find
   i32.eqz
   if
@@ -6665,11 +7471,11 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $3
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $3
+   local.get $4
    i32.const 4
    i32.shl
    i32.add
@@ -6685,7 +7491,7 @@
    local.get $2
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -6702,74 +7508,13 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<i64>#__set (param $0 i32) (param $1 i32) (param $2 i64)
-  (local $3 i32)
-  local.get $1
-  local.get $0
-  i32.load offset=12
-  i32.ge_u
-  if
-   local.get $1
-   i32.const 0
-   i32.lt_s
-   if
-    i32.const 1408
-    i32.const 1360
-    i32.const 120
-    i32.const 22
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $0
-   local.get $1
-   i32.const 1
-   i32.add
-   local.tee $3
-   i32.const 3
-   call $~lib/array/ensureSize
-   local.get $0
-   local.get $3
-   i32.store offset=12
-  end
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 3
-  i32.shl
-  i32.add
-  local.get $2
-  i64.store
- )
- (func $~lib/array/Array<i64>#set:length (param $0 i32) (param $1 i32)
-  local.get $0
-  i32.load offset=12
-  drop
-  local.get $0
-  local.get $1
-  i32.const 3
-  call $~lib/array/ensureSize
-  local.get $0
-  local.get $1
-  i32.store offset=12
- )
- (func $~lib/set/Set<i64>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<i64>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $4
   local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 134217726
   i32.gt_u
   if
@@ -6780,94 +7525,121 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 3
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
   i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
-  call $~lib/rt/tlsf/__alloc
+  i32.const 16
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $3
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $5
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $6
   i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 4
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=8
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i64.load
-     call $~lib/array/Array<i64>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
+  local.get $3
+ )
+ (func $~lib/array/Array<i64>#__set (param $0 i32) (param $1 i32) (param $2 i64)
+  (local $3 i32)
+  local.get $1
+  local.get $0
+  i32.load offset=12
+  i32.ge_u
+  if
+   local.get $1
+   i32.const 0
+   i32.lt_s
+   if
+    i32.const 1408
+    i32.const 1360
+    i32.const 120
+    i32.const 22
+    call $~lib/builtins/abort
+    unreachable
    end
+   local.get $0
+   local.get $1
+   i32.const 1
+   i32.add
+   local.tee $3
+   i32.const 3
+   call $~lib/array/ensureSize
+   local.get $0
+   local.get $3
+   i32.store offset=12
   end
   local.get $0
-  local.get $9
-  call $~lib/array/Array<i64>#set:length
+  i32.load offset=4
+  local.get $1
+  i32.const 3
+  i32.shl
+  i32.add
+  local.get $2
+  i64.store
+ )
+ (func $~lib/array/Array<i64>#set:length (param $0 i32) (param $1 i32)
+  local.get $0
+  i32.load offset=12
+  drop
+  local.get $0
+  local.get $1
+  i32.const 3
+  call $~lib/array/ensureSize
   local.get $0
+  local.get $1
+  i32.store offset=12
  )
  (func $~lib/array/Array<i64>#__get (param $0 i32) (param $1 i32) (result i64)
   local.get $1
@@ -6956,6 +7728,10 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
   call $~lib/set/Set<i64>#constructor
   local.set $1
   loop $for-loop|0
@@ -6965,7 +7741,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -6977,10 +7755,20 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7018,7 +7806,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7031,10 +7821,20 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7064,21 +7864,65 @@
    unreachable
   end
   local.get $1
-  call $~lib/set/Set<i64>#values
+  i32.load offset=8
+  local.set $6
+  local.get $1
+  i32.load offset=16
+  local.tee $7
+  call $~lib/array/Array<i64>#constructor
   local.set $2
+  loop $for-loop|00
+   local.get $4
+   local.get $7
+   i32.lt_s
+   if
+    local.get $6
+    local.get $4
+    i32.const 4
+    i32.shl
+    i32.add
+    local.tee $8
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $2
+     local.get $3
+     local.get $8
+     i64.load
+     call $~lib/array/Array<i64>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|00
+   end
+  end
+  local.get $2
+  local.get $3
+  call $~lib/array/Array<i64>#set:length
   call $~lib/set/Set<i64>#constructor
-  local.set $4
+  local.set $3
   loop $for-loop|2
-   local.get $3
+   local.get $5
    local.get $2
    i32.load offset=12
    i32.lt_s
    if
     local.get $1
     local.get $2
-    local.get $3
+    local.get $5
     call $~lib/array/Array<i64>#__get
-    call $~lib/set/Set<i64>#has
+    local.tee $0
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7088,20 +7932,28 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $4
-    local.get $2
     local.get $3
+    local.get $2
+    local.get $5
     call $~lib/array/Array<i64>#__get
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
-    local.get $3
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $5
     i32.const 1
     i32.add
-    local.set $3
+    local.set $5
     br $for-loop|2
    end
   end
-  local.get $4
+  local.get $3
   i32.load offset=20
   local.get $1
   i32.load offset=20
@@ -7123,7 +7975,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7138,7 +7992,9 @@
     call $~lib/set/Set<i64>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -7175,7 +8031,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -7187,10 +8045,20 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7205,7 +8073,9 @@
     call $~lib/set/Set<i64>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -7246,17 +8116,41 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<u64>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 17
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -7280,24 +8174,13 @@
   call $~lib/set/Set<i64>#clear
   local.get $0
  )
- (func $~lib/set/Set<u64>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<u64>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
-  i32.load offset=8
-  local.set $4
-  local.get $0
-  i32.load offset=16
-  local.tee $7
-  local.set $6
-  local.get $7
   i32.const 134217726
   i32.gt_u
   if
@@ -7308,94 +8191,71 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 3
   i32.shl
-  local.tee $5
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $5
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 18
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
-  i32.load
-  local.tee $3
-  i32.ne
-  if
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $3
-   call $~lib/rt/pure/__release
-  end
-  local.get $0
   local.get $1
-  i32.store
-  local.get $0
-  local.get $2
-  i32.store offset=4
-  local.get $0
-  local.get $5
-  i32.store offset=8
-  local.get $0
-  local.get $6
-  i32.store offset=12
-  loop $for-loop|0
-   local.get $8
-   local.get $7
-   i32.lt_s
-   if
-    local.get $4
-    local.get $8
-    i32.const 4
-    i32.shl
-    i32.add
-    local.tee $2
-    i32.load offset=8
-    i32.const 1
-    i32.and
-    i32.eqz
-    if
-     local.get $0
-     local.get $9
-     local.get $2
-     i64.load
-     call $~lib/array/Array<i64>#__set
-     local.get $9
-     i32.const 1
-     i32.add
-     local.set $9
-    end
-    local.get $8
-    i32.const 1
-    i32.add
-    local.set $8
-    br $for-loop|0
+  local.set $2
+  local.get $1
+  local.get $3
+  i32.load
+  local.tee $5
+  i32.ne
+  if
+   local.get $2
+   call $~lib/rt/pure/__retain
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
    end
   end
+  local.get $3
+  local.get $2
+  i32.store
+  local.get $3
+  local.get $1
+  i32.store offset=4
+  local.get $3
+  local.get $4
+  i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $9
-  call $~lib/array/Array<i64>#set:length
-  local.get $0
+  i32.store offset=12
+  local.get $3
  )
  (func $std/set/testNumeric<u64>
   (local $0 i64)
@@ -7403,6 +8263,10 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
   call $~lib/set/Set<u64>#constructor
   local.set $1
   loop $for-loop|0
@@ -7412,7 +8276,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -7424,10 +8290,20 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7465,7 +8341,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7478,10 +8356,20 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7511,21 +8399,65 @@
    unreachable
   end
   local.get $1
-  call $~lib/set/Set<u64>#values
+  i32.load offset=8
+  local.set $6
+  local.get $1
+  i32.load offset=16
+  local.tee $7
+  call $~lib/array/Array<u64>#constructor
   local.set $2
+  loop $for-loop|00
+   local.get $4
+   local.get $7
+   i32.lt_s
+   if
+    local.get $6
+    local.get $4
+    i32.const 4
+    i32.shl
+    i32.add
+    local.tee $8
+    i32.load offset=8
+    i32.const 1
+    i32.and
+    i32.eqz
+    if
+     local.get $2
+     local.get $3
+     local.get $8
+     i64.load
+     call $~lib/array/Array<i64>#__set
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|00
+   end
+  end
+  local.get $2
+  local.get $3
+  call $~lib/array/Array<i64>#set:length
   call $~lib/set/Set<u64>#constructor
-  local.set $4
+  local.set $3
   loop $for-loop|2
-   local.get $3
+   local.get $5
    local.get $2
    i32.load offset=12
    i32.lt_s
    if
     local.get $1
     local.get $2
-    local.get $3
+    local.get $5
     call $~lib/array/Array<i64>#__get
-    call $~lib/set/Set<i64>#has
+    local.tee $0
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7535,20 +8467,28 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $4
-    local.get $2
     local.get $3
+    local.get $2
+    local.get $5
     call $~lib/array/Array<i64>#__get
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
-    local.get $3
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $5
     i32.const 1
     i32.add
-    local.set $3
+    local.set $5
     br $for-loop|2
    end
   end
-  local.get $4
+  local.get $3
   i32.load offset=20
   local.get $1
   i32.load offset=20
@@ -7570,7 +8510,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7585,7 +8527,9 @@
     call $~lib/set/Set<i64>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -7622,7 +8566,9 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -7634,10 +8580,20 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<i64>#add
-    call $~lib/rt/pure/__release
+    local.tee $4
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $4
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     i32.eqz
     if
      i32.const 0
@@ -7652,7 +8608,9 @@
     call $~lib/set/Set<i64>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<i64>#has
+    local.get $0
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<i64>#find
     if
      i32.const 0
      i32.const 1312
@@ -7693,17 +8651,41 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<f32>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 19
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -7768,16 +8750,6 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<f32>#has (param $0 i32) (param $1 f32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i32.reinterpret_f32
-  call $~lib/util/hash/hash32
-  call $~lib/set/Set<f32>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/set/Set<f32>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -7789,51 +8761,50 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $7
   i32.const 3
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 3
   i32.shl
   i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  local.set $6
+  local.get $2
+  local.set $3
   loop $while-continue|0
    local.get $6
-   local.get $7
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      f32.load
      f32.store
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
+     local.get $8
      f32.load
      i32.reinterpret_f32
      call $~lib/util/hash/hash32
@@ -7842,84 +8813,112 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $5
      i32.load
      i32.store offset=4
-     local.get $2
-     local.get $4
+     local.get $5
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 8
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 8
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $8
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $8
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store offset=8
+  local.get $0
+  local.get $7
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.load offset=20
+  i32.store offset=16
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $1
   local.get $2
-  i32.store offset=8
-  local.get $1
-  local.get $8
-  i32.store offset=12
-  local.get $1
-  local.get $1
-  i32.load offset=20
-  i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<f32>#add (param $0 i32) (param $1 f32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i32.reinterpret_f32
   call $~lib/util/hash/hash32
-  local.tee $4
+  local.tee $2
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<f32>#find
   i32.eqz
   if
@@ -7957,11 +8956,11 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $3
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $3
+   local.get $4
    i32.const 3
    i32.shl
    i32.add
@@ -7977,7 +8976,7 @@
    local.get $2
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -7994,25 +8993,13 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $~lib/set/Set<f32>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<f32>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 f32)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
   local.get $0
-  i32.load offset=16
-  local.tee $8
-  local.set $7
-  local.get $8
   i32.const 268435452
   i32.gt_u
   if
@@ -8023,82 +9010,112 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $7
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 2
   i32.shl
-  local.tee $6
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $6
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 20
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $4
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $6
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $7
   i32.store offset=12
+  local.get $3
+ )
+ (func $~lib/set/Set<f32>#values (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f32)
+  local.get $0
+  i32.load offset=8
+  local.set $4
+  local.get $0
+  i32.load offset=16
+  local.tee $5
+  call $~lib/array/Array<f32>#constructor
+  local.set $0
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $2
+   local.get $5
    i32.lt_s
    if
-    local.get $5
-    local.get $9
+    local.get $4
+    local.get $2
     i32.const 3
     i32.shl
     i32.add
-    local.tee $2
+    local.tee $3
     i32.load offset=4
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $2
+     local.get $3
      f32.load
-     local.set $3
-     local.get $10
+     local.set $6
+     local.get $1
      local.get $0
      i32.load offset=12
      i32.ge_u
      if
-      local.get $10
+      local.get $1
       i32.const 0
       i32.lt_s
       if
@@ -8110,38 +9127,38 @@
        unreachable
       end
       local.get $0
-      local.get $10
+      local.get $1
       i32.const 1
       i32.add
-      local.tee $2
+      local.tee $3
       i32.const 2
       call $~lib/array/ensureSize
       local.get $0
-      local.get $2
+      local.get $3
       i32.store offset=12
      end
      local.get $0
      i32.load offset=4
-     local.get $10
+     local.get $1
      i32.const 2
      i32.shl
      i32.add
-     local.get $3
+     local.get $6
      f32.store
-     local.get $10
+     local.get $1
      i32.const 1
      i32.add
-     local.set $10
+     local.set $1
     end
-    local.get $9
+    local.get $2
     i32.const 1
     i32.add
-    local.set $9
+    local.set $2
     br $for-loop|0
    end
   end
   local.get $0
-  local.get $10
+  local.get $1
   call $~lib/array/Array<i32>#set:length
   local.get $0
  )
@@ -8233,6 +9250,7 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
+  (local $5 i32)
   call $~lib/set/Set<f32>#constructor
   local.set $1
   loop $for-loop|0
@@ -8242,7 +9260,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8254,10 +9275,21 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<f32>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     i32.eqz
     if
      i32.const 0
@@ -8295,7 +9327,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     i32.eqz
     if
      i32.const 0
@@ -8308,10 +9343,21 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<f32>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     i32.eqz
     if
      i32.const 0
@@ -8355,7 +9401,11 @@
     local.get $2
     local.get $3
     call $~lib/array/Array<f32>#__get
-    call $~lib/set/Set<f32>#has
+    local.tee $0
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     i32.eqz
     if
      i32.const 0
@@ -8370,7 +9420,15 @@
     local.get $3
     call $~lib/array/Array<f32>#__get
     call $~lib/set/Set<f32>#add
-    call $~lib/rt/pure/__release
+    local.tee $5
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $5
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $3
     i32.const 1
     i32.add
@@ -8400,7 +9458,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     i32.eqz
     if
      i32.const 0
@@ -8415,7 +9476,10 @@
     call $~lib/set/Set<f32>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8452,7 +9516,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8464,10 +9531,21 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<f32>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     i32.eqz
     if
      i32.const 0
@@ -8482,7 +9560,10 @@
     call $~lib/set/Set<f32>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<f32>#has
+    local.get $0
+    i32.reinterpret_f32
+    call $~lib/util/hash/hash32
+    call $~lib/set/Set<f32>#find
     if
      i32.const 0
      i32.const 1312
@@ -8523,17 +9604,41 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<f64>#constructor (result i32)
   (local $0 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 24
   i32.const 21
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.tee $0
   i32.const 0
@@ -8598,16 +9703,6 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<f64>#has (param $0 i32) (param $1 f64) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  i64.reinterpret_f64
-  call $~lib/util/hash/hash64
-  call $~lib/set/Set<f64>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/set/Set<f64>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -8619,51 +9714,50 @@
   local.get $1
   i32.const 1
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 2
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $5
-  local.get $3
+  local.set $4
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 3
   i32.div_s
-  local.tee $8
+  local.tee $7
   i32.const 4
   i32.shl
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $3
+  local.set $2
   local.get $0
   i32.load offset=8
-  local.tee $6
+  local.tee $8
   local.get $0
   i32.load offset=16
   i32.const 4
   i32.shl
   i32.add
-  local.set $7
-  local.get $3
-  local.set $4
+  local.set $6
+  local.get $2
+  local.set $3
   loop $while-continue|0
    local.get $6
-   local.get $7
+   local.get $8
    i32.ne
    if
-    local.get $6
-    local.tee $2
+    local.get $8
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $4
-     local.get $2
+     local.get $3
+     local.get $8
      f64.load
      f64.store
+     local.get $3
      local.get $4
-     local.get $5
-     local.get $2
+     local.get $8
      f64.load
      i64.reinterpret_f64
      call $~lib/util/hash/hash64
@@ -8672,84 +9766,112 @@
      i32.const 2
      i32.shl
      i32.add
-     local.tee $2
+     local.tee $5
      i32.load
      i32.store offset=8
-     local.get $2
-     local.get $4
+     local.get $5
+     local.get $3
      i32.store
-     local.get $4
+     local.get $3
      i32.const 16
      i32.add
-     local.set $4
+     local.set $3
     end
-    local.get $6
+    local.get $8
     i32.const 16
     i32.add
-    local.set $6
+    local.set $8
     br $while-continue|0
    end
   end
-  local.get $5
-  local.tee $4
+  local.get $4
+  local.tee $3
   local.get $0
-  local.tee $2
   i32.load
-  local.tee $6
+  local.tee $8
   i32.ne
   if
-   local.get $4
+   local.get $3
    call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $6
-   call $~lib/rt/pure/__release
+   local.set $3
+   local.get $8
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $2
-  local.get $4
+  local.get $0
+  local.get $3
   i32.store
-  local.get $2
+  local.get $0
   local.get $1
   i32.store offset=4
   local.get $2
   local.set $1
-  local.get $3
-  local.tee $2
-  local.get $1
+  local.get $2
+  local.get $0
   i32.load offset=8
-  local.tee $4
+  local.tee $3
   i32.ne
   if
-   local.get $2
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $1
+   local.get $3
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
+  local.get $0
   local.get $1
-  local.get $2
   i32.store offset=8
-  local.get $1
-  local.get $8
+  local.get $0
+  local.get $7
   i32.store offset=12
-  local.get $1
-  local.get $1
+  local.get $0
+  local.get $0
   i32.load offset=20
   i32.store offset=16
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $4
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/set/Set<f64>#add (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  local.get $0
-  local.get $1
   local.get $1
   i64.reinterpret_f64
   call $~lib/util/hash/hash64
-  local.tee $4
+  local.tee $2
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<f64>#find
   i32.eqz
   if
@@ -8787,11 +9909,11 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $3
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $3
+   local.get $4
    i32.const 4
    i32.shl
    i32.add
@@ -8807,7 +9929,7 @@
    local.get $2
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -8824,25 +9946,13 @@
   local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $~lib/set/Set<f64>#values (param $0 i32) (result i32)
+ (func $~lib/array/Array<f64>#constructor (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 f64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $0
-  i32.load offset=8
-  local.set $5
   local.get $0
-  i32.load offset=16
-  local.tee $8
-  local.set $7
-  local.get $8
   i32.const 134217726
   i32.gt_u
   if
@@ -8853,82 +9963,112 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $7
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
   i32.const 3
   i32.shl
-  local.tee $6
+  local.tee $4
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
-  local.get $6
-  call $~lib/memory/memory.fill
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  local.get $4
+  call $~lib/util/memory/memset
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 22
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
-  local.tee $0
+  local.tee $3
   i32.const 0
   i32.store
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=4
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=8
-  local.get $0
+  local.get $3
   i32.const 0
   i32.store offset=12
-  local.get $2
-  local.set $1
-  local.get $2
-  local.get $0
+  local.get $1
+  local.set $2
+  local.get $1
+  local.get $3
   i32.load
-  local.tee $4
+  local.tee $5
   i32.ne
   if
-   local.get $1
+   local.get $2
    call $~lib/rt/pure/__retain
-   local.set $1
-   local.get $4
-   call $~lib/rt/pure/__release
+   local.set $2
+   local.get $5
+   i32.const 1444
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  local.get $0
-  local.get $1
-  i32.store
-  local.get $0
+  local.get $3
   local.get $2
+  i32.store
+  local.get $3
+  local.get $1
   i32.store offset=4
-  local.get $0
-  local.get $6
+  local.get $3
+  local.get $4
   i32.store offset=8
+  local.get $3
   local.get $0
-  local.get $7
   i32.store offset=12
+  local.get $3
+ )
+ (func $~lib/set/Set<f64>#values (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f64)
+  local.get $0
+  i32.load offset=8
+  local.set $4
+  local.get $0
+  i32.load offset=16
+  local.tee $5
+  call $~lib/array/Array<f64>#constructor
+  local.set $0
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $2
+   local.get $5
    i32.lt_s
    if
-    local.get $5
-    local.get $9
+    local.get $4
+    local.get $2
     i32.const 4
     i32.shl
     i32.add
-    local.tee $2
+    local.tee $3
     i32.load offset=8
     i32.const 1
     i32.and
     i32.eqz
     if
-     local.get $2
+     local.get $3
      f64.load
-     local.set $3
-     local.get $10
+     local.set $6
+     local.get $1
      local.get $0
      i32.load offset=12
      i32.ge_u
      if
-      local.get $10
+      local.get $1
       i32.const 0
       i32.lt_s
       if
@@ -8940,38 +10080,38 @@
        unreachable
       end
       local.get $0
-      local.get $10
+      local.get $1
       i32.const 1
       i32.add
-      local.tee $2
+      local.tee $3
       i32.const 3
       call $~lib/array/ensureSize
       local.get $0
-      local.get $2
+      local.get $3
       i32.store offset=12
      end
      local.get $0
      i32.load offset=4
-     local.get $10
+     local.get $1
      i32.const 3
      i32.shl
      i32.add
-     local.get $3
+     local.get $6
      f64.store
-     local.get $10
+     local.get $1
      i32.const 1
      i32.add
-     local.set $10
+     local.set $1
     end
-    local.get $9
+    local.get $2
     i32.const 1
     i32.add
-    local.set $9
+    local.set $2
     br $for-loop|0
    end
   end
   local.get $0
-  local.get $10
+  local.get $1
   call $~lib/array/Array<i64>#set:length
   local.get $0
  )
@@ -9063,6 +10203,7 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
+  (local $5 i32)
   call $~lib/set/Set<f64>#constructor
   local.set $1
   loop $for-loop|0
@@ -9072,7 +10213,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     if
      i32.const 0
      i32.const 1312
@@ -9084,10 +10228,21 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<f64>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     i32.eqz
     if
      i32.const 0
@@ -9125,7 +10280,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     i32.eqz
     if
      i32.const 0
@@ -9138,10 +10296,21 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<f64>#add
-    call $~lib/rt/pure/__release
+    local.tee $2
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $2
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     i32.eqz
     if
      i32.const 0
@@ -9185,7 +10354,11 @@
     local.get $2
     local.get $3
     call $~lib/array/Array<f64>#__get
-    call $~lib/set/Set<f64>#has
+    local.tee $0
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     i32.eqz
     if
      i32.const 0
@@ -9200,7 +10373,15 @@
     local.get $3
     call $~lib/array/Array<f64>#__get
     call $~lib/set/Set<f64>#add
-    call $~lib/rt/pure/__release
+    local.tee $5
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $5
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $3
     i32.const 1
     i32.add
@@ -9230,7 +10411,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     i32.eqz
     if
      i32.const 0
@@ -9245,7 +10429,10 @@
     call $~lib/set/Set<f64>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     if
      i32.const 0
      i32.const 1312
@@ -9282,7 +10469,10 @@
    if
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     if
      i32.const 0
      i32.const 1312
@@ -9294,10 +10484,21 @@
     local.get $1
     local.get $0
     call $~lib/set/Set<f64>#add
-    call $~lib/rt/pure/__release
+    local.tee $3
+    i32.const 1444
+    i32.gt_u
+    if
+     local.get $3
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     i32.eqz
     if
      i32.const 0
@@ -9312,7 +10513,10 @@
     call $~lib/set/Set<f64>#delete
     local.get $1
     local.get $0
-    call $~lib/set/Set<f64>#has
+    local.get $0
+    i64.reinterpret_f64
+    call $~lib/util/hash/hash64
+    call $~lib/set/Set<f64>#find
     if
      i32.const 0
      i32.const 1312
@@ -9353,11 +10557,32 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 1444
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   call $std/set/testNumeric<i8>
diff --git a/tests/compiler/std/set.untouched.wat b/tests/compiler/std/set.untouched.wat
index d25308241e..1b7fff634b 100644
--- a/tests/compiler/std/set.untouched.wat
+++ b/tests/compiler/std/set.untouched.wat
@@ -1,9 +1,10 @@
 (module
- (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $i32_=>_none (func (param i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i64_=>_i32 (func (param i32 i64) (result i32)))
@@ -11,16 +12,17 @@
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
  (type $i32_f32_=>_i32 (func (param i32 f32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_f32_=>_none (func (param i32 i32 f32)))
  (type $i32_i32_f64_=>_none (func (param i32 i32 f64)))
  (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (type $i32_i32_=>_f64 (func (param i32 i32) (result f64)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
  (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
- (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $f32_=>_i32 (func (param f32) (result i32)))
+ (type $f64_=>_i32 (func (param f64) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -45,6 +47,69 @@
  (global $~lib/heap/__heap_base i32 (i32.const 436))
  (export "memory" (memory $0))
  (start $~start)
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -53,9 +118,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -68,7 +130,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -95,7 +157,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -149,7 +211,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -174,77 +236,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -261,6 +281,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -272,8 +298,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -281,7 +305,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -298,28 +322,18 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -330,44 +344,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -375,30 +379,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 32
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -417,22 +417,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -458,7 +458,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -470,18 +470,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 32
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -535,27 +535,15 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -570,24 +558,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -597,31 +571,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -629,8 +587,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -656,24 +612,22 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -681,7 +635,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -689,16 +643,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -714,7 +668,7 @@
    if
     i32.const 0
     i32.const 32
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -723,8 +677,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -735,49 +689,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -790,10 +740,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -843,73 +789,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -922,11 +841,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -946,7 +865,7 @@
   if
    i32.const 80
    i32.const 32
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -972,9 +891,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1042,31 +958,24 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1079,79 +988,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 32
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1188,9 +1066,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1204,12 +1080,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1219,7 +1095,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1256,7 +1132,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1307,29 +1183,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1349,7 +1205,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1396,7 +1252,7 @@
      if
       i32.const 0
       i32.const 32
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1417,7 +1273,7 @@
     if
      i32.const 0
      i32.const 32
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1438,7 +1294,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1538,219 +1394,214 @@
   end
   local.get $0
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   local.get $1
@@ -1786,9 +1637,28 @@
    call $~lib/rt/pure/decrement
   end
  )
+ (func $~lib/set/ENTRY_ALIGN<i8> (result i32)
+  i32.const 3
+ )
+ (func $~lib/set/ENTRY_SIZE<i8> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<i8>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<i8>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -1805,16 +1675,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<i8>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -1865,6 +1739,25 @@
   i32.const 16777619
   i32.mul
  )
+ (func $~lib/util/hash/HASH<i8> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  i32.const 1
+  i32.eq
+  drop
+  local.get $0
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  call $~lib/util/hash/hash8
+  return
+ )
  (func $~lib/set/Set<i8>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -1918,30 +1811,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<i8>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i8>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
   call $~lib/set/Set<i8>#find
   i32.const 0
   i32.ne
@@ -1977,7 +1850,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<i8>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -1987,7 +1860,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<i8>
   i32.mul
   i32.add
   local.set $7
@@ -2014,24 +1887,9 @@
      local.get $10
      i32.load8_s
      i32.store8
-     block $~lib/util/hash/HASH<i8>|inlined.2 (result i32)
-      local.get $10
-      i32.load8_s
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      i32.const 1
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash8
-      br $~lib/util/hash/HASH<i8>|inlined.2
-     end
+     local.get $10
+     i32.load8_s
+     call $~lib/util/hash/HASH<i8>
      local.get $1
      i32.and
      local.set $12
@@ -2049,12 +1907,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/set/ENTRY_SIZE<i8>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<i8>
     i32.add
     local.set $6
     br $while-continue|0
@@ -2095,52 +1953,33 @@
    local.get $11
    call $~lib/rt/pure/__release
   end
-  local.get $9
-  i32.store offset=8
-  local.get $0
-  local.get $4
-  i32.store offset=12
-  local.get $0
-  local.get $0
-  i32.load offset=20
-  i32.store offset=16
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
- )
- (func $~lib/set/Set<i8>#add (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  block $~lib/util/hash/HASH<i8>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.1
-  end
-  local.set $3
+  local.get $9
+  i32.store offset=8
   local.get $0
-  local.get $1
+  local.get $4
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.load offset=20
+  i32.store offset=16
   local.get $3
+  call $~lib/rt/pure/__release
+  local.get $5
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/set/Set<i8>#add (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
+  local.set $2
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<i8>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -2177,16 +2016,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $2
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $2
-   i32.const 8
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<i8>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i32.store8
    local.get $0
@@ -2197,20 +2036,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $2
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $2
    i32.load
    i32.store offset=4
-   local.get $2
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -2341,7 +2180,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -3372,238 +3211,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
+       return
       end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $0
+      local.get $4
+      local.get $1
+      local.tee $4
+      i32.const 1
+      i32.add
+      local.set $1
+      local.get $4
+      i32.load8_u
+      i32.store8
+      br $while-continue|0
      end
-     loop $while-continue|1
-      local.get $3
+    end
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
+      i32.add
+      local.set $0
+      local.get $1
+      i32.const 8
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|2
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $7
-      local.get $4
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
       i32.add
-      local.set $4
-      local.get $7
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
-     end
-    end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
-      i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      br $while-continue|3
      end
     end
-    loop $while-continue|5
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
-      i32.const 1
+      local.get $2
+      i32.const 8
       i32.sub
-      local.tee $3
+      local.set $2
+      local.get $0
+      local.get $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
-      i32.load8_u
-      i32.store8
-      br $while-continue|5
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
@@ -3654,22 +3488,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -3680,25 +3504,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
@@ -3909,7 +3733,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<i8>
     i32.mul
     i32.add
     local.set $7
@@ -3984,30 +3808,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i8>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 24
-   i32.shl
-   i32.const 24
-   i32.shr_s
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<i8>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i8>
   call $~lib/set/Set<i8>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -4015,8 +3820,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -4031,16 +3836,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -4060,7 +3865,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<i8>#rehash
   end
   i32.const 1
@@ -4421,9 +4226,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<u8> (result i32)
+  i32.const 3
+ )
+ (func $~lib/set/ENTRY_SIZE<u8> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<u8>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<u8>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -4440,16 +4264,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<u8>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -4493,6 +4321,23 @@
   call $~lib/set/Set<u8>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u8> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  i32.const 1
+  i32.eq
+  drop
+  local.get $0
+  i32.const 255
+  i32.and
+  call $~lib/util/hash/hash8
+  return
+ )
  (func $~lib/set/Set<u8>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -4544,28 +4389,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<u8>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u8>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
   call $~lib/set/Set<u8>#find
   i32.const 0
   i32.ne
@@ -4601,7 +4428,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<u8>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -4611,7 +4438,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<u8>
   i32.mul
   i32.add
   local.set $7
@@ -4638,24 +4465,9 @@
      local.get $10
      i32.load8_u
      i32.store8
-     block $~lib/util/hash/HASH<u8>|inlined.2 (result i32)
-      local.get $10
-      i32.load8_u
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      i32.const 1
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash8
-      br $~lib/util/hash/HASH<u8>|inlined.2
-     end
+     local.get $10
+     i32.load8_u
+     call $~lib/util/hash/HASH<u8>
      local.get $1
      i32.and
      local.set $12
@@ -4673,12 +4485,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/set/ENTRY_SIZE<u8>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<u8>
     i32.add
     local.set $6
     br $while-continue|0
@@ -4737,32 +4549,15 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<u8>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.1
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
+  local.set $2
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/set/Set<u8>#find
   local.set $3
-  local.get $0
-  local.get $1
   local.get $3
-  call $~lib/set/Set<u8>#find
-  local.set $4
-  local.get $4
   i32.eqz
   if
    local.get $0
@@ -4799,16 +4594,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $2
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $2
-   i32.const 8
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<u8>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i32.store8
    local.get $0
@@ -4819,20 +4614,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $2
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $2
    i32.load
    i32.store offset=4
-   local.get $2
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -5015,7 +4810,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<u8>
     i32.mul
     i32.add
     local.set $7
@@ -5090,28 +4885,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u8>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   i32.const 1
-   i32.eq
-   drop
-   local.get $2
-   i32.const 255
-   i32.and
-   call $~lib/util/hash/hash8
-   br $~lib/util/hash/HASH<u8>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u8>
   call $~lib/set/Set<u8>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -5119,8 +4897,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -5135,16 +4913,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -5164,7 +4942,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<u8>#rehash
   end
   i32.const 1
@@ -5517,9 +5295,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<i16> (result i32)
+  i32.const 3
+ )
+ (func $~lib/set/ENTRY_SIZE<i16> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<i16>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<i16>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -5536,16 +5333,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<i16>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -5611,6 +5412,29 @@
   local.set $1
   local.get $1
  )
+ (func $~lib/util/hash/HASH<i16> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 2
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 2
+  i32.const 2
+  i32.eq
+  drop
+  local.get $0
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  call $~lib/util/hash/hash16
+  return
+ )
  (func $~lib/set/Set<i16>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -5664,34 +5488,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<i16>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i16>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
   call $~lib/set/Set<i16>#find
   i32.const 0
   i32.ne
@@ -5727,7 +5527,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<i16>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -5737,7 +5537,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<i16>
   i32.mul
   i32.add
   local.set $7
@@ -5764,28 +5564,9 @@
      local.get $10
      i32.load16_s
      i32.store16
-     block $~lib/util/hash/HASH<i16>|inlined.2 (result i32)
-      local.get $10
-      i32.load16_s
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 2
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 2
-      i32.const 2
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash16
-      br $~lib/util/hash/HASH<i16>|inlined.2
-     end
+     local.get $10
+     i32.load16_s
+     call $~lib/util/hash/HASH<i16>
      local.get $1
      i32.and
      local.set $12
@@ -5803,12 +5584,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/set/ENTRY_SIZE<i16>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<i16>
     i32.add
     local.set $6
     br $while-continue|0
@@ -5867,38 +5648,15 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<i16>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.1
-  end
-  local.set $3
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
+  local.set $2
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<i16>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -5935,16 +5693,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $2
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $2
-   i32.const 8
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<i16>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i32.store16
    local.get $0
@@ -5955,20 +5713,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $2
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $2
    i32.load
    i32.store offset=4
-   local.get $2
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -6151,7 +5909,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<i16>
     i32.mul
     i32.add
     local.set $7
@@ -6226,34 +5984,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i16>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 16
-   i32.shl
-   i32.const 16
-   i32.shr_s
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<i16>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i16>
   call $~lib/set/Set<i16>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -6261,8 +5996,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -6277,16 +6012,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -6306,7 +6041,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<i16>#rehash
   end
   i32.const 1
@@ -6667,9 +6402,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<u16> (result i32)
+  i32.const 3
+ )
+ (func $~lib/set/ENTRY_SIZE<u16> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<u16>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<u16>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -6686,16 +6440,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<u16>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -6739,6 +6497,27 @@
   call $~lib/set/Set<u16>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u16> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 2
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 2
+  i32.const 2
+  i32.eq
+  drop
+  local.get $0
+  i32.const 65535
+  i32.and
+  call $~lib/util/hash/hash16
+  return
+ )
  (func $~lib/set/Set<u16>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -6790,32 +6569,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<u16>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u16>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
   call $~lib/set/Set<u16>#find
   i32.const 0
   i32.ne
@@ -6851,7 +6608,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<u16>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -6861,7 +6618,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<u16>
   i32.mul
   i32.add
   local.set $7
@@ -6888,28 +6645,9 @@
      local.get $10
      i32.load16_u
      i32.store16
-     block $~lib/util/hash/HASH<u16>|inlined.2 (result i32)
-      local.get $10
-      i32.load16_u
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 2
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 2
-      i32.const 2
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash16
-      br $~lib/util/hash/HASH<u16>|inlined.2
-     end
+     local.get $10
+     i32.load16_u
+     call $~lib/util/hash/HASH<u16>
      local.get $1
      i32.and
      local.set $12
@@ -6927,12 +6665,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/set/ENTRY_SIZE<u16>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<u16>
     i32.add
     local.set $6
     br $while-continue|0
@@ -6991,36 +6729,15 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<u16>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.1
-  end
-  local.set $3
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
+  local.set $2
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<u16>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -7057,16 +6774,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $2
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $2
-   i32.const 8
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<u16>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i32.store16
    local.get $0
@@ -7077,20 +6794,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $2
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $2
    i32.load
    i32.store offset=4
-   local.get $2
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -7273,7 +6990,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<u16>
     i32.mul
     i32.add
     local.set $7
@@ -7348,32 +7065,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u16>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 2
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 2
-   i32.const 2
-   i32.eq
-   drop
-   local.get $2
-   i32.const 65535
-   i32.and
-   call $~lib/util/hash/hash16
-   br $~lib/util/hash/HASH<u16>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u16>
   call $~lib/set/Set<u16>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -7381,8 +7077,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -7397,16 +7093,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -7426,7 +7122,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<u16>#rehash
   end
   i32.const 1
@@ -7779,9 +7475,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<i32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/set/ENTRY_SIZE<i32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<i32>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<i32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -7798,16 +7513,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<i32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -7893,6 +7612,29 @@
   local.set $1
   local.get $1
  )
+ (func $~lib/util/hash/HASH<i32> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 4
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash32
+  return
+ )
  (func $~lib/set/Set<i32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -7942,34 +7684,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<i32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i32>
   call $~lib/set/Set<i32>#find
   i32.const 0
   i32.ne
@@ -8005,7 +7723,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<i32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -8015,7 +7733,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<i32>
   i32.mul
   i32.add
   local.set $7
@@ -8042,32 +7760,9 @@
      local.get $10
      i32.load
      i32.store
-     block $~lib/util/hash/HASH<i32>|inlined.2 (result i32)
-      local.get $10
-      i32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 4
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<i32>|inlined.2
-     end
+     local.get $10
+     i32.load
+     call $~lib/util/hash/HASH<i32>
      local.get $1
      i32.and
      local.set $12
@@ -8085,12 +7780,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/set/ENTRY_SIZE<i32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<i32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -8149,38 +7844,15 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<i32>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.1
-  end
-  local.set $3
+  local.get $1
+  call $~lib/util/hash/HASH<i32>
+  local.set $2
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<i32>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -8217,16 +7889,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $2
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $2
-   i32.const 8
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<i32>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i32.store
    local.get $0
@@ -8237,20 +7909,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $2
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $2
    i32.load
    i32.store offset=4
-   local.get $2
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -8433,7 +8105,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<i32>
     i32.mul
     i32.add
     local.set $7
@@ -8508,34 +8180,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<i32>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i32>
   call $~lib/set/Set<i32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -8543,8 +8192,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -8559,16 +8208,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -8588,7 +8237,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<i32>#rehash
   end
   i32.const 1
@@ -8929,9 +8578,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<u32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/set/ENTRY_SIZE<u32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<u32>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<u32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -8948,16 +8616,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<u32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -9001,6 +8673,29 @@
   call $~lib/set/Set<u32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u32> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 4
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash32
+  return
+ )
  (func $~lib/set/Set<u32>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -9050,34 +8745,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<u32>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
   call $~lib/set/Set<u32>#find
   i32.const 0
   i32.ne
@@ -9113,7 +8784,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<u32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -9123,7 +8794,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<u32>
   i32.mul
   i32.add
   local.set $7
@@ -9150,32 +8821,9 @@
      local.get $10
      i32.load
      i32.store
-     block $~lib/util/hash/HASH<u32>|inlined.2 (result i32)
-      local.get $10
-      i32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 4
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<u32>|inlined.2
-     end
+     local.get $10
+     i32.load
+     call $~lib/util/hash/HASH<u32>
      local.get $1
      i32.and
      local.set $12
@@ -9193,12 +8841,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/set/ENTRY_SIZE<u32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<u32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -9257,38 +8905,15 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/hash/HASH<u32>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.1
-  end
-  local.set $3
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
+  local.set $2
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<u32>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -9325,16 +8950,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $2
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $2
-   i32.const 8
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<u32>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i32.store
    local.get $0
@@ -9345,20 +8970,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $2
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $2
    i32.load
    i32.store offset=4
-   local.get $2
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -9541,7 +9166,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<u32>
     i32.mul
     i32.add
     local.set $7
@@ -9616,34 +9241,11 @@
   (local $5 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<u32>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u32>
   call $~lib/set/Set<u32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -9651,8 +9253,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -9667,16 +9269,16 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $2
+  local.tee $4
   local.get $0
   i32.load offset=20
   local.tee $5
-  local.get $2
+  local.get $4
   local.get $5
   i32.gt_u
   select
@@ -9696,7 +9298,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<u32>#rehash
   end
   i32.const 1
@@ -10037,9 +9639,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<i64> (result i32)
+  i32.const 7
+ )
+ (func $~lib/set/ENTRY_SIZE<i64> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<i64>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<i64>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -10056,16 +9677,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<i64>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 64
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -10197,6 +9822,33 @@
   local.set $3
   local.get $3
  )
+ (func $~lib/util/hash/HASH<i64> (param $0 i64) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 8
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 8
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash64
+  return
+ )
  (func $~lib/set/Set<i64>#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -10246,38 +9898,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<i64>#has (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
   call $~lib/set/Set<i64>#find
   i32.const 0
   i32.ne
@@ -10293,9 +9917,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -10314,7 +9937,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 16
+  call $~lib/set/ENTRY_SIZE<i64>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -10324,7 +9947,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 16
+  call $~lib/set/ENTRY_SIZE<i64>
   i32.mul
   i32.add
   local.set $7
@@ -10351,59 +9974,32 @@
      local.get $10
      i64.load
      i64.store
-     block $~lib/util/hash/HASH<i64>|inlined.2 (result i32)
-      local.get $10
-      i64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 8
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<i64>|inlined.2
-     end
+     local.get $10
+     i64.load
+     call $~lib/util/hash/HASH<i64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=8
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 16
+     call $~lib/set/ENTRY_SIZE<i64>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 16
+    call $~lib/set/ENTRY_SIZE<i64>
     i32.add
     local.set $6
     br $while-continue|0
@@ -10412,28 +10008,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -10459,46 +10055,18 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/set/Set<i64>#add (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<i64>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.1
-  end
-  local.set $3
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
+  local.set $2
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<i64>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -10535,16 +10103,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $5
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $5
-   i32.const 16
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<i64>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i64.store
    local.get $0
@@ -10555,20 +10123,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $5
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $5
    i32.load
    i32.store offset=8
-   local.get $5
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -10751,7 +10319,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/set/ENTRY_SIZE<i64>
     i32.mul
     i32.add
     local.set $7
@@ -10820,45 +10388,17 @@
   local.get $2
  )
  (func $~lib/set/Set<i64>#delete (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<i64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<i64>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<i64>
   call $~lib/set/Set<i64>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -10866,8 +10406,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -10882,17 +10422,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -10911,7 +10451,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<i64>#rehash
   end
   i32.const 1
@@ -11253,9 +10793,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<u64> (result i32)
+  i32.const 7
+ )
+ (func $~lib/set/ENTRY_SIZE<u64> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<u64>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<u64>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -11272,16 +10831,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<u64>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 64
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -11325,6 +10888,33 @@
   call $~lib/set/Set<u64>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<u64> (param $0 i64) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 8
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 8
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash64
+  return
+ )
  (func $~lib/set/Set<u64>#find (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -11373,39 +10963,11 @@
   end
   i32.const 0
  )
- (func $~lib/set/Set<u64>#has (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
-  local.get $0
-  local.get $1
-  block $~lib/util/hash/HASH<u64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.0
-  end
+ (func $~lib/set/Set<u64>#has (param $0 i32) (param $1 i64) (result i32)
+  local.get $0
+  local.get $1
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
   call $~lib/set/Set<u64>#find
   i32.const 0
   i32.ne
@@ -11421,9 +10983,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -11442,7 +11003,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 16
+  call $~lib/set/ENTRY_SIZE<u64>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -11452,7 +11013,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 16
+  call $~lib/set/ENTRY_SIZE<u64>
   i32.mul
   i32.add
   local.set $7
@@ -11479,59 +11040,32 @@
      local.get $10
      i64.load
      i64.store
-     block $~lib/util/hash/HASH<u64>|inlined.2 (result i32)
-      local.get $10
-      i64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 8
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<u64>|inlined.2
-     end
+     local.get $10
+     i64.load
+     call $~lib/util/hash/HASH<u64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=8
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 16
+     call $~lib/set/ENTRY_SIZE<u64>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 16
+    call $~lib/set/ENTRY_SIZE<u64>
     i32.add
     local.set $6
     br $while-continue|0
@@ -11540,28 +11074,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -11587,46 +11121,18 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/set/Set<u64>#add (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<u64>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.1
-  end
-  local.set $3
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
+  local.set $2
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<u64>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -11663,16 +11169,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $5
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $5
-   i32.const 16
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<u64>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    i64.store
    local.get $0
@@ -11683,20 +11189,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $5
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $5
    i32.load
    i32.store offset=8
-   local.get $5
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -11879,7 +11385,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/set/ENTRY_SIZE<u64>
     i32.mul
     i32.add
     local.set $7
@@ -11948,45 +11454,17 @@
   local.get $2
  )
  (func $~lib/set/Set<u64>#delete (param $0 i32) (param $1 i64) (result i32)
-  (local $2 i64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<u64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 8
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<u64>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<u64>
   call $~lib/set/Set<u64>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -11994,8 +11472,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -12010,17 +11488,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -12039,7 +11517,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<u64>#rehash
   end
   i32.const 1
@@ -12381,9 +11859,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<f32> (result i32)
+  i32.const 3
+ )
+ (func $~lib/set/ENTRY_SIZE<f32> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<f32>
+  local.set $0
+  i32.const 8
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<f32>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -12400,16 +11897,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<f32>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 32
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -12453,6 +11954,22 @@
   call $~lib/set/Set<f32>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<f32> (param $0 f32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  i32.reinterpret_f32
+  call $~lib/util/hash/hash32
+  return
+ )
  (func $~lib/set/Set<f32>#find (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -12502,27 +12019,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<f32>#has (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f32>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
   call $~lib/set/Set<f32>#find
   i32.const 0
   i32.ne
@@ -12538,9 +12038,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 f32)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -12559,7 +12058,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<f32>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -12569,7 +12068,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 8
+  call $~lib/set/ENTRY_SIZE<f32>
   i32.mul
   i32.add
   local.set $7
@@ -12596,48 +12095,32 @@
      local.get $10
      f32.load
      f32.store
-     block $~lib/util/hash/HASH<f32>|inlined.2 (result i32)
-      local.get $10
-      f32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      i32.reinterpret_f32
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<f32>|inlined.2
-     end
+     local.get $10
+     f32.load
+     call $~lib/util/hash/HASH<f32>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=4
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 8
+     call $~lib/set/ENTRY_SIZE<f32>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<f32>
     i32.add
     local.set $6
     br $while-continue|0
@@ -12646,28 +12129,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -12681,47 +12164,30 @@
   local.get $9
   i32.store offset=8
   local.get $0
-  local.get $4
-  i32.store offset=12
-  local.get $0
-  local.get $0
-  i32.load offset=20
-  i32.store offset=16
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
- )
- (func $~lib/set/Set<f32>#add (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<f32>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.1
-  end
-  local.set $3
+  local.get $4
+  i32.store offset=12
   local.get $0
-  local.get $1
+  local.get $0
+  i32.load offset=20
+  i32.store offset=16
   local.get $3
+  call $~lib/rt/pure/__release
+  local.get $5
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/set/Set<f32>#add (param $0 i32) (param $1 f32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
+  local.set $2
+  local.get $0
+  local.get $1
+  local.get $2
   call $~lib/set/Set<f32>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -12758,16 +12224,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $5
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $5
-   i32.const 8
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<f32>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    f32.store
    local.get $0
@@ -12778,20 +12244,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $5
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $5
    i32.load
    i32.store offset=4
-   local.get $5
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -12974,7 +12440,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 8
+    call $~lib/set/ENTRY_SIZE<f32>
     i32.mul
     i32.add
     local.set $7
@@ -13043,34 +12509,17 @@
   local.get $2
  )
  (func $~lib/set/Set<f32>#delete (param $0 i32) (param $1 f32) (result i32)
-  (local $2 f32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f32>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   i32.reinterpret_f32
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<f32>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f32>
   call $~lib/set/Set<f32>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -13078,8 +12527,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=4
   i32.const 1
   i32.or
@@ -13094,17 +12543,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -13123,7 +12572,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<f32>#rehash
   end
   i32.const 1
@@ -13465,9 +12914,28 @@
   local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/set/ENTRY_ALIGN<f64> (result i32)
+  i32.const 7
+ )
+ (func $~lib/set/ENTRY_SIZE<f64> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/set/ENTRY_ALIGN<f64>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/set/Set<f64>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -13484,16 +12952,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/set/ENTRY_SIZE<f64>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 64
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/pure/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -13537,6 +13009,26 @@
   call $~lib/set/Set<f64>#clear
   local.get $0
  )
+ (func $~lib/util/hash/HASH<f64> (param $0 f64) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 8
+  i32.const 8
+  i32.eq
+  drop
+  local.get $0
+  i64.reinterpret_f64
+  call $~lib/util/hash/hash64
+  return
+ )
  (func $~lib/set/Set<f64>#find (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -13586,31 +13078,10 @@
   i32.const 0
  )
  (func $~lib/set/Set<f64>#has (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f64>|inlined.0 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
   call $~lib/set/Set<f64>#find
   i32.const 0
   i32.ne
@@ -13626,9 +13097,8 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 f64)
+  (local $12 i32)
   (local $13 i32)
-  (local $14 i32)
   local.get $1
   i32.const 1
   i32.add
@@ -13647,7 +13117,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 16
+  call $~lib/set/ENTRY_SIZE<f64>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -13657,7 +13127,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 16
+  call $~lib/set/ENTRY_SIZE<f64>
   i32.mul
   i32.add
   local.set $7
@@ -13684,52 +13154,32 @@
      local.get $10
      f64.load
      f64.store
-     block $~lib/util/hash/HASH<f64>|inlined.2 (result i32)
-      local.get $10
-      f64.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 1
-      drop
-      i32.const 8
-      i32.const 4
-      i32.eq
-      drop
-      i32.const 8
-      i32.const 8
-      i32.eq
-      drop
-      local.get $12
-      i64.reinterpret_f64
-      call $~lib/util/hash/hash64
-      br $~lib/util/hash/HASH<f64>|inlined.2
-     end
+     local.get $10
+     f64.load
+     call $~lib/util/hash/HASH<f64>
      local.get $1
      i32.and
-     local.set $13
+     local.set $12
      local.get $3
-     local.get $13
+     local.get $12
      i32.const 4
      i32.mul
      i32.add
-     local.set $14
+     local.set $13
      local.get $11
-     local.get $14
+     local.get $13
      i32.load
      i32.store offset=8
-     local.get $14
+     local.get $13
      local.get $8
      i32.store
      local.get $8
-     i32.const 16
+     call $~lib/set/ENTRY_SIZE<f64>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 16
+    call $~lib/set/ENTRY_SIZE<f64>
     i32.add
     local.set $6
     br $while-continue|0
@@ -13738,28 +13188,28 @@
   local.get $0
   local.tee $11
   local.get $3
-  local.tee $13
+  local.tee $12
   local.get $11
   i32.load
   local.tee $9
   i32.ne
   if
-   local.get $13
+   local.get $12
    call $~lib/rt/pure/__retain
-   local.set $13
+   local.set $12
    local.get $9
    call $~lib/rt/pure/__release
   end
-  local.get $13
+  local.get $12
   i32.store
   local.get $0
   local.get $1
   i32.store offset=4
   local.get $0
-  local.tee $14
+  local.tee $13
   local.get $5
   local.tee $9
-  local.get $14
+  local.get $13
   i32.load offset=8
   local.tee $11
   i32.ne
@@ -13785,39 +13235,18 @@
   call $~lib/rt/pure/__release
  )
  (func $~lib/set/Set<f64>#add (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  block $~lib/util/hash/HASH<f64>|inlined.1 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.1
-  end
-  local.set $3
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
+  local.set $2
   local.get $0
   local.get $1
-  local.get $3
+  local.get $2
   call $~lib/set/Set<f64>#find
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.eqz
   if
    local.get $0
@@ -13854,16 +13283,16 @@
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $5
+   local.tee $4
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $5
-   i32.const 16
+   local.get $4
+   call $~lib/set/ENTRY_SIZE<f64>
    i32.mul
    i32.add
-   local.set $4
-   local.get $4
+   local.set $3
+   local.get $3
    local.get $1
    f64.store
    local.get $0
@@ -13874,20 +13303,20 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $3
+   local.get $2
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $5
+   local.set $4
+   local.get $3
    local.get $4
-   local.get $5
    i32.load
    i32.store offset=8
-   local.get $5
    local.get $4
+   local.get $3
    i32.store
   end
   local.get $0
@@ -14070,7 +13499,7 @@
    if
     local.get $1
     local.get $5
-    i32.const 16
+    call $~lib/set/ENTRY_SIZE<f64>
     i32.mul
     i32.add
     local.set $7
@@ -14139,38 +13568,17 @@
   local.get $2
  )
  (func $~lib/set/Set<f64>#delete (param $0 i32) (param $1 f64) (result i32)
-  (local $2 f64)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<f64>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 1
-   drop
-   i32.const 8
-   i32.const 4
-   i32.eq
-   drop
-   i32.const 8
-   i32.const 8
-   i32.eq
-   drop
-   local.get $2
-   i64.reinterpret_f64
-   call $~lib/util/hash/hash64
-   br $~lib/util/hash/HASH<f64>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<f64>
   call $~lib/set/Set<f64>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 0
@@ -14178,8 +13586,8 @@
   end
   i32.const 0
   drop
-  local.get $3
-  local.get $3
+  local.get $2
+  local.get $2
   i32.load offset=8
   i32.const 1
   i32.or
@@ -14194,17 +13602,17 @@
   i32.load offset=4
   i32.const 1
   i32.shr_u
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 1
   i32.add
   i32.const 4
-  local.tee $5
+  local.tee $4
   local.get $0
   i32.load offset=20
-  local.tee $6
+  local.tee $5
+  local.get $4
   local.get $5
-  local.get $6
   i32.gt_u
   select
   i32.ge_u
@@ -14223,7 +13631,7 @@
   end
   if
    local.get $0
-   local.get $4
+   local.get $3
    call $~lib/set/Set<f64>#rehash
   end
   i32.const 1
diff --git a/tests/compiler/std/static-array.optimized.wat b/tests/compiler/std/static-array.optimized.wat
index 3edb592153..71f2b36593 100644
--- a/tests/compiler/std/static-array.optimized.wat
+++ b/tests/compiler/std/static-array.optimized.wat
@@ -91,177 +91,179 @@
   local.get $0
   global.set $~lib/rt/stub/offset
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/stub/__realloc (param $0 i32) (param $1 i32) (result i32)
@@ -392,7 +394,7 @@
     local.get $0
     local.get $4
     i32.load offset=12
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $2
     local.tee $0
     i32.const 16
@@ -416,161 +418,171 @@
   i32.store offset=12
   local.get $0
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
   (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -613,7 +625,7 @@
    local.get $3
    local.get $2
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
    local.get $1
    local.get $4
    i32.ne
diff --git a/tests/compiler/std/static-array.untouched.wat b/tests/compiler/std/static-array.untouched.wat
index 7a6d33f942..c650fa6ac0 100644
--- a/tests/compiler/std/static-array.untouched.wat
+++ b/tests/compiler/std/static-array.untouched.wat
@@ -1205,245 +1205,240 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
-   end
-  end
- )
- (func $~lib/rt/stub/__realloc (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
+  end
+ )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
+ (func $~lib/rt/stub/__realloc (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
   local.get $0
   i32.const 0
   i32.ne
@@ -1562,219 +1557,214 @@
   i32.store offset=12
   local.get $0
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=1
+  local.get $0
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
    local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
+   i32.const 32
+   i32.ge_u
    local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
    local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
    if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
     i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
  (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
diff --git a/tests/compiler/std/staticarray.optimized.wat b/tests/compiler/std/staticarray.optimized.wat
index ec97281e2d..0bb1a6488f 100644
--- a/tests/compiler/std/staticarray.optimized.wat
+++ b/tests/compiler/std/staticarray.optimized.wat
@@ -2,12 +2,12 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_none (func))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -30,18 +30,14 @@
  (global $~started (mut i32) (i32.const 0))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
- (func $~lib/staticarray/StaticArray<i32>#get:length (param $0 i32) (result i32)
+ (func $~lib/staticarray/StaticArray<i32>#__get (param $0 i32) (param $1 i32) (result i32)
+  local.get $1
   local.get $0
   i32.const 16
   i32.sub
   i32.load offset=12
   i32.const 2
   i32.shr_u
- )
- (func $~lib/staticarray/StaticArray<i32>#__get (param $0 i32) (param $1 i32) (result i32)
-  local.get $1
-  local.get $0
-  call $~lib/staticarray/StaticArray<i32>#get:length
   i32.ge_u
   if
    i32.const 1072
@@ -61,7 +57,11 @@
  (func $~lib/staticarray/StaticArray<i32>#__set (param $0 i32) (param $1 i32)
   i32.const 1
   local.get $0
-  call $~lib/staticarray/StaticArray<i32>#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_u
   i32.ge_u
   if
    i32.const 1072
@@ -75,6 +75,31 @@
   local.get $1
   i32.store offset=4
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -89,7 +114,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -111,7 +136,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -130,23 +155,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -154,61 +179,53 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -216,9 +233,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -227,7 +242,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -250,7 +265,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -264,7 +279,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -277,9 +292,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -288,7 +303,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -297,7 +312,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -315,9 +330,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -337,7 +352,7 @@
    if
     i32.const 0
     i32.const 1328
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -370,8 +385,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -392,27 +407,27 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1328
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -441,13 +456,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -455,21 +470,15 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -484,31 +493,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -538,7 +544,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -555,7 +561,7 @@
    if
     i32.const 0
     i32.const 1328
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -583,7 +589,7 @@
    if
     i32.const 0
     i32.const 1328
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -635,7 +641,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -656,7 +662,8 @@
     unreachable
    end
    i32.const 1472
-   local.tee $0
+   local.set $2
+   i32.const 1472
    i32.const 0
    i32.store
    i32.const 3040
@@ -675,27 +682,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1472
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -715,10 +716,11 @@
    i32.const 1472
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -728,23 +730,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -773,7 +774,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -791,16 +792,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -821,26 +816,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1328
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -858,7 +849,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -903,13 +894,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -929,7 +921,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -940,7 +932,7 @@
   if
    i32.const 1376
    i32.const 1328
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1040,7 +1032,7 @@
     if
      i32.const 0
      i32.const 1328
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1056,7 +1048,7 @@
   if
    i32.const 0
    i32.const 1328
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1081,198 +1073,195 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   local.get $1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $1
   local.get $2
   if
    local.get $1
    local.get $2
    local.get $0
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   end
   local.get $1
  )
@@ -1327,26 +1316,9 @@
   end
   local.get $0
  )
- (func $std/staticarray/test (result i32)
-  i32.const 12
-  i32.const 3
-  i32.const 1296
-  call $~lib/rt/__allocBuffer
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 1472
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $start:std/staticarray
   (local $0 i32)
+  (local $1 i32)
   i32.const 1040
   i32.const 1
   call $~lib/staticarray/StaticArray<i32>#__get
@@ -1360,8 +1332,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1040
-  call $~lib/staticarray/StaticArray<i32>#get:length
+  i32.const 1036
+  i32.load
+  i32.const 2
+  i32.shr_u
   i32.const 3
   i32.ne
   if
@@ -1401,8 +1375,10 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1264
-  call $~lib/staticarray/StaticArray<i32>#get:length
+  i32.const 1260
+  i32.load
+  i32.const 2
+  i32.shr_u
   i32.const 3
   i32.ne
   if
@@ -1429,7 +1405,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $std/staticarray/test
+  i32.const 12
+  i32.const 3
+  i32.const 1296
+  call $~lib/rt/__allocBuffer
+  call $~lib/rt/pure/__retain
   global.set $std/staticarray/arr3
   global.get $std/staticarray/arr3
   i32.const 0
@@ -1471,7 +1451,11 @@
    unreachable
   end
   global.get $std/staticarray/arr3
-  call $~lib/staticarray/StaticArray<i32>#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 2
+  i32.shr_u
   i32.const 3
   i32.ne
   if
@@ -1498,9 +1482,21 @@
    call $~lib/builtins/abort
    unreachable
   end
-  call $std/staticarray/test
+  i32.const 12
+  i32.const 3
+  i32.const 1296
+  call $~lib/rt/__allocBuffer
+  call $~lib/rt/pure/__retain
   global.get $std/staticarray/arr3
-  call $~lib/rt/pure/__release
+  local.tee $1
+  i32.const 1472
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   global.set $std/staticarray/arr3
   global.get $std/staticarray/arr3
   i32.const 1
@@ -1521,15 +1517,21 @@
   call $~lib/rt/__allocBuffer
   call $~lib/rt/pure/__retain
   local.tee $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store
   local.get $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 0
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   i32.store offset=4
   local.get $0
@@ -1538,7 +1540,14 @@
   local.tee $0
   if
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 1472
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   i32.const 0
   global.set $std/staticarray/arr3
@@ -1546,7 +1555,14 @@
   local.tee $0
   if
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 1472
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   i32.const 0
   global.set $std/staticarray/arr4
diff --git a/tests/compiler/std/staticarray.untouched.wat b/tests/compiler/std/staticarray.untouched.wat
index 7698493990..f4f723d840 100644
--- a/tests/compiler/std/staticarray.untouched.wat
+++ b/tests/compiler/std/staticarray.untouched.wat
@@ -4,10 +4,10 @@
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -104,6 +104,69 @@
   local.get $2
   call $~lib/staticarray/StaticArray<i32>#__unchecked_set
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -112,9 +175,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -127,7 +187,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -154,7 +214,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -208,7 +268,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -233,77 +293,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -320,6 +338,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -331,8 +355,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -340,7 +362,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -357,28 +379,18 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -389,44 +401,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -434,30 +436,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 320
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -476,22 +474,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -517,7 +515,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -529,18 +527,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 320
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -594,27 +592,15 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -629,24 +615,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -656,31 +628,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -688,8 +644,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -715,24 +669,22 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -740,7 +692,7 @@
    if
     i32.const 0
     i32.const 320
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -748,16 +700,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -773,7 +725,7 @@
    if
     i32.const 0
     i32.const 320
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -782,8 +734,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -794,49 +746,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -849,10 +797,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -902,73 +846,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -981,11 +898,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1005,7 +922,7 @@
   if
    i32.const 368
    i32.const 320
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1031,9 +948,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1101,31 +1015,24 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1138,79 +1045,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 320
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1247,9 +1123,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1263,12 +1137,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1278,7 +1152,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1315,7 +1189,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1366,29 +1240,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1408,7 +1262,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1455,7 +1309,7 @@
      if
       i32.const 0
       i32.const 320
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1476,7 +1330,7 @@
     if
      i32.const 0
      i32.const 320
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1497,7 +1351,7 @@
   if
    i32.const 0
    i32.const 320
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -2556,238 +2410,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
diff --git a/tests/compiler/std/string-casemapping.optimized.wat b/tests/compiler/std/string-casemapping.optimized.wat
index 25640a67c8..077ad5056e 100644
--- a/tests/compiler/std/string-casemapping.optimized.wat
+++ b/tests/compiler/std/string-casemapping.optimized.wat
@@ -1,10 +1,10 @@
 (module
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
@@ -305,14 +305,6 @@
  (global $~started (mut i32) (i32.const 0))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -364,6 +356,31 @@
   end
   local.get $0
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -378,7 +395,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -400,7 +417,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -419,23 +436,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -443,61 +460,53 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -505,9 +514,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -516,7 +523,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -539,7 +546,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -553,7 +560,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -566,9 +573,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -577,7 +584,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -586,7 +593,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -604,9 +611,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -626,7 +633,7 @@
    if
     i32.const 0
     i32.const 1104
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -659,8 +666,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -681,27 +688,27 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1104
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -730,13 +737,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -744,21 +751,15 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -773,31 +774,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -827,7 +825,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -844,7 +842,7 @@
    if
     i32.const 0
     i32.const 1104
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -872,7 +870,7 @@
    if
     i32.const 0
     i32.const 1104
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -924,7 +922,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -945,7 +943,8 @@
     unreachable
    end
    i32.const 18624
-   local.tee $0
+   local.set $2
+   i32.const 18624
    i32.const 0
    i32.store
    i32.const 20192
@@ -964,27 +963,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 18624
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -1004,7 +997,7 @@
    i32.const 18624
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -1013,7 +1006,7 @@
   if
    i32.const 1152
    i32.const 1104
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1032,6 +1025,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1041,23 +1035,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -1086,7 +1079,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1104,16 +1097,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -1134,26 +1121,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1104
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -1171,7 +1154,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1216,13 +1199,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -1242,7 +1226,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1333,7 +1317,7 @@
     if
      i32.const 0
      i32.const 1104
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1349,7 +1333,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1374,14 +1358,6 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  i32.const 1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/util/casemap/casemap (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -1533,177 +1509,179 @@
   i32.and
   i32.add
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
@@ -1752,7 +1730,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -1775,10 +1755,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -1808,7 +1788,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 18616
   i32.ge_u
@@ -1859,7 +1839,7 @@
   if
    i32.const 0
    i32.const 1104
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -1882,33 +1862,43 @@
   (local $9 i32)
   (local $10 i32)
   local.get $0
-  call $~lib/string/String#get:length
-  local.tee $6
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $8
   i32.eqz
   if
    local.get $0
    call $~lib/rt/pure/__retain
    return
   end
-  local.get $6
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $8
   i32.const 3
   i32.mul
   i32.const 1
   i32.shl
-  call $~lib/rt/tlsf/__alloc
-  local.set $8
-  i32.const 1216
-  call $~lib/string/String#get:length
-  local.set $3
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $6
+  i32.const 1212
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.set $4
   loop $for-loop|0
    local.get $7
-   local.get $6
+   local.get $8
    i32.lt_u
    if
+    local.get $0
     local.get $7
     i32.const 1
     i32.shl
-    local.get $0
     i32.add
     i32.load16_u
     local.tee $2
@@ -1917,7 +1907,7 @@
     if
      block $for-continue|0
       local.get $7
-      local.get $6
+      local.get $8
       i32.const 1
       i32.sub
       i32.lt_u
@@ -1929,13 +1919,13 @@
       i32.lt_u
       select
       if
+       local.get $0
        local.get $7
        i32.const 1
        i32.shl
-       local.get $0
        i32.add
        i32.load16_u offset=2
-       local.tee $9
+       local.tee $3
        i32.const 56319
        i32.sub
        i32.const 1025
@@ -1945,7 +1935,7 @@
         i32.const 1
         i32.add
         local.set $7
-        local.get $9
+        local.get $3
         i32.const 1023
         i32.and
         local.get $2
@@ -1961,21 +1951,21 @@
         i32.const 131072
         i32.ge_u
         if
-         local.get $10
+         local.get $6
+         local.get $5
          i32.const 1
          i32.shl
-         local.get $8
          i32.add
-         local.get $9
+         local.get $1
+         local.get $3
          i32.const 16
          i32.shl
-         local.get $1
          i32.or
          i32.store
-         local.get $10
+         local.get $5
          i32.const 1
          i32.add
-         local.set $10
+         local.set $5
          br $for-continue|0
         end
        end
@@ -1986,10 +1976,10 @@
       i32.const 25
       i32.le_u
       if
-       local.get $10
+       local.get $6
+       local.get $5
        i32.const 1
        i32.shl
-       local.get $8
        i32.add
        local.get $2
        i32.const 26
@@ -2004,24 +1994,24 @@
        i32.const 64056
        i32.le_u
        if
-        block $~lib/util/casemap/bsearch|inlined.0 (result i32)
-         local.get $3
-         local.set $1
+        block $__inlined_func$~lib/util/casemap/bsearch
+         local.get $4
+         local.set $3
          i32.const 0
-         local.set $5
-         loop $while-continue|1
-          local.get $5
-          local.get $1
+         local.set $9
+         loop $while-continue|0
+          local.get $9
+          local.get $3
           i32.le_s
           if
-           local.get $1
-           local.get $5
+           local.get $3
+           local.get $9
            i32.add
            i32.const 3
            i32.shr_u
            i32.const 2
            i32.shl
-           local.tee $9
+           local.tee $1
            i32.const 1
            i32.shl
            i32.const 1216
@@ -2029,32 +2019,29 @@
            i32.load16_u
            local.get $2
            i32.sub
-           local.tee $4
+           local.tee $10
+           i32.eqz
+           br_if $__inlined_func$~lib/util/casemap/bsearch
+           local.get $10
+           i32.const 31
+           i32.shr_u
            if
-            local.get $4
-            i32.const 31
-            i32.shr_u
-            if
-             local.get $9
-             i32.const 4
-             i32.add
-             local.set $5
-            else
-             local.get $9
-             i32.const 4
-             i32.sub
-             local.set $1
-            end
+            local.get $1
+            i32.const 4
+            i32.add
+            local.set $9
            else
-            local.get $9
-            br $~lib/util/casemap/bsearch|inlined.0
+            local.get $1
+            i32.const 4
+            i32.sub
+            local.set $3
            end
-           br $while-continue|1
+           br $while-continue|0
           end
          end
          i32.const -1
+         local.set $1
         end
-        local.set $1
        end
        local.get $1
        i32.const -1
@@ -2065,61 +2052,61 @@
         i32.shl
         i32.const 1216
         i32.add
-        local.tee $1
+        local.tee $2
         i32.load16_u offset=6
-        local.set $2
-        local.get $10
+        local.set $3
+        local.get $6
+        local.get $5
         i32.const 1
         i32.shl
-        local.get $8
         i32.add
-        local.tee $9
-        local.get $1
+        local.tee $1
+        local.get $2
         i32.load offset=2
         i32.store
-        local.get $9
-        local.get $2
+        local.get $1
+        local.get $3
         i32.store16 offset=4
-        local.get $2
+        local.get $5
+        local.get $3
         i32.const 0
         i32.ne
         i32.const 1
         i32.add
-        local.get $10
         i32.add
-        local.set $10
+        local.set $5
        else
         local.get $2
         i32.const 1
         call $~lib/util/casemap/casemap
         i32.const 2097151
         i32.and
-        local.tee $2
+        local.tee $1
         i32.const 65536
         i32.lt_s
         if
-         local.get $10
+         local.get $6
+         local.get $5
          i32.const 1
          i32.shl
-         local.get $8
          i32.add
-         local.get $2
+         local.get $1
          i32.store16
         else
-         local.get $10
+         local.get $6
+         local.get $5
          i32.const 1
          i32.shl
-         local.get $8
          i32.add
-         local.get $2
+         local.get $1
          i32.const 65536
          i32.sub
-         local.tee $2
+         local.tee $1
          i32.const 10
          i32.shr_u
          i32.const 55296
          i32.or
-         local.get $2
+         local.get $1
          i32.const 1023
          i32.and
          i32.const 56320
@@ -2128,32 +2115,30 @@
          i32.shl
          i32.or
          i32.store
-         local.get $10
+         local.get $5
          i32.const 1
          i32.add
-         local.set $10
+         local.set $5
         end
        end
       end
      end
     else
-     local.get $10
+     local.get $6
+     local.get $5
      i32.const 1
      i32.shl
-     local.get $8
      i32.add
      local.get $2
+     local.get $2
      i32.const 97
      i32.sub
      i32.const 26
      i32.lt_u
-     i32.const 0
-     i32.ne
      i32.const 5
      i32.shl
      i32.const -1
      i32.xor
-     local.get $2
      i32.and
      i32.store16
     end
@@ -2161,31 +2146,20 @@
     i32.const 1
     i32.add
     local.set $7
-    local.get $10
+    local.get $5
     i32.const 1
     i32.add
-    local.set $10
+    local.set $5
     br $for-loop|0
    end
   end
-  local.get $8
-  local.get $10
+  local.get $6
+  local.get $5
   i32.const 1
   i32.shl
   call $~lib/rt/tlsf/__realloc
   call $~lib/rt/pure/__retain
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 18616
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -2279,13 +2253,21 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
-   i32.ne
-   br_if $folding-inner0
-   local.get $0
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   i32.ne
+   br_if $folding-inner0
+   local.get $0
    local.get $1
    local.get $2
    call $~lib/util/string/compareImpl
@@ -2319,6 +2301,238 @@
   i32.const 1
   i32.and
  )
+ (func $~lib/util/string/isFinalSigma (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  i32.const 0
+  local.get $1
+  local.tee $3
+  i32.const 30
+  i32.sub
+  local.tee $4
+  i32.const 0
+  local.get $4
+  i32.gt_s
+  select
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $7
+   i32.gt_s
+   if
+    block $__inlined_func$~lib/util/string/codePointBefore (result i32)
+     i32.const -1
+     local.get $3
+     local.tee $4
+     i32.const 0
+     i32.le_s
+     br_if $__inlined_func$~lib/util/string/codePointBefore
+     drop
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.sub
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.load16_u
+     local.tee $3
+     i32.const 64512
+     i32.and
+     i32.const 56320
+     i32.eq
+     local.get $4
+     i32.const 2
+     i32.sub
+     i32.const 0
+     i32.ge_s
+     i32.and
+     if
+      local.get $0
+      local.get $4
+      i32.const 2
+      i32.sub
+      i32.const 1
+      i32.shl
+      i32.add
+      i32.load16_u
+      local.tee $5
+      i32.const 64512
+      i32.and
+      i32.const 55296
+      i32.eq
+      if
+       local.get $3
+       i32.const 1023
+       i32.and
+       local.get $5
+       i32.const 1023
+       i32.and
+       i32.const 10
+       i32.shl
+       i32.add
+       i32.const 65536
+       i32.add
+       br $__inlined_func$~lib/util/string/codePointBefore
+      end
+     end
+     i32.const 65533
+     local.get $3
+     local.get $3
+     i32.const 63488
+     i32.and
+     i32.const 55296
+     i32.eq
+     select
+    end
+    local.tee $3
+    local.set $5
+    local.get $3
+    i32.const 918000
+    i32.lt_u
+    if (result i32)
+     i32.const 6658
+     local.get $5
+     call $~lib/util/string/stagedBinaryLookup
+    else
+     i32.const 0
+    end
+    i32.eqz
+    if
+     local.get $3
+     i32.const 127370
+     i32.lt_u
+     if (result i32)
+      i32.const 9666
+      local.get $3
+      call $~lib/util/string/stagedBinaryLookup
+     else
+      i32.const 0
+     end
+     i32.eqz
+     if
+      i32.const 0
+      return
+     end
+     i32.const 1
+     local.set $6
+    end
+    local.get $4
+    local.get $3
+    i32.const 65536
+    i32.ge_s
+    i32.const 1
+    i32.add
+    i32.sub
+    local.set $3
+    br $while-continue|0
+   end
+  end
+  local.get $6
+  i32.eqz
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i32.const 1
+  i32.add
+  local.tee $3
+  i32.const 30
+  i32.add
+  local.tee $1
+  local.get $2
+  local.get $1
+  local.get $2
+  i32.lt_s
+  select
+  local.set $5
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i32.lt_s
+   if
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.tee $1
+    i32.const 64512
+    i32.and
+    i32.const 55296
+    i32.eq
+    local.get $2
+    local.get $3
+    i32.const 1
+    i32.add
+    i32.ne
+    i32.and
+    if
+     local.get $0
+     local.get $3
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.load16_u offset=2
+     local.tee $4
+     i32.const 64512
+     i32.and
+     i32.const 56320
+     i32.eq
+     if
+      local.get $4
+      local.get $1
+      i32.const 10
+      i32.shl
+      i32.add
+      i32.const -56613888
+      i32.add
+      local.set $1
+     end
+    end
+    local.get $1
+    i32.const 918000
+    i32.lt_u
+    if (result i32)
+     i32.const 6658
+     local.get $1
+     call $~lib/util/string/stagedBinaryLookup
+    else
+     i32.const 0
+    end
+    i32.eqz
+    if
+     local.get $1
+     i32.const 127370
+     i32.lt_u
+     if (result i32)
+      i32.const 9666
+      local.get $1
+      call $~lib/util/string/stagedBinaryLookup
+     else
+      i32.const 0
+     end
+     i32.eqz
+     return
+    end
+    local.get $3
+    local.get $1
+    i32.const 65536
+    i32.ge_u
+    i32.const 1
+    i32.add
+    i32.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  i32.const 1
+ )
  (func $~lib/string/String#toLowerCase (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -2327,27 +2541,31 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $0
-  call $~lib/string/String#get:length
-  local.tee $7
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $4
   i32.eqz
   if
    local.get $0
    call $~lib/rt/pure/__retain
    return
   end
-  local.get $7
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
   i32.const 2
   i32.shl
-  call $~lib/rt/tlsf/__alloc
-  local.set $10
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $6
   loop $for-loop|0
    local.get $5
-   local.get $7
+   local.get $4
    i32.lt_u
    if
     local.get $0
@@ -2362,7 +2580,7 @@
     if
      block $for-continue|0
       local.get $5
-      local.get $7
+      local.get $4
       i32.const 1
       i32.sub
       i32.lt_u
@@ -2380,7 +2598,7 @@
        i32.shl
        i32.add
        i32.load16_u offset=2
-       local.tee $4
+       local.tee $3
        i32.const 56319
        i32.sub
        i32.const 1025
@@ -2390,7 +2608,7 @@
         i32.const 1
         i32.add
         local.set $5
-        local.get $4
+        local.get $3
         i32.const 1023
         i32.and
         local.get $2
@@ -2406,21 +2624,21 @@
         i32.const 131072
         i32.ge_u
         if
-         local.get $10
-         local.get $11
+         local.get $6
+         local.get $7
          i32.const 1
          i32.shl
          i32.add
          local.get $1
-         local.get $4
+         local.get $3
          i32.const 16
          i32.shl
          i32.or
          i32.store
-         local.get $11
+         local.get $7
          i32.const 1
          i32.add
-         local.set $11
+         local.set $7
          br $for-continue|0
         end
        end
@@ -2429,263 +2647,35 @@
       i32.const 304
       i32.eq
       if
-       local.get $10
-       local.get $11
+       local.get $6
+       local.get $7
        i32.const 1
        i32.shl
        i32.add
        i32.const 50790505
        i32.store
-       local.get $11
+       local.get $7
        i32.const 1
        i32.add
-       local.set $11
+       local.set $7
       else
        local.get $2
        i32.const 931
        i32.eq
        if
-        local.get $10
-        local.get $11
+        local.get $6
+        local.get $7
         i32.const 1
         i32.shl
         i32.add
-        local.get $7
+        local.get $4
         i32.const 1
         i32.gt_u
         if (result i32)
-         block $~lib/util/string/isFinalSigma|inlined.0 (result i32)
-          local.get $0
-          local.set $4
-          local.get $5
-          i32.const 0
-          local.set $9
-          i32.const 0
-          local.get $5
-          local.tee $2
-          i32.const 30
-          i32.sub
-          local.tee $1
-          i32.const 0
-          local.get $1
-          i32.gt_s
-          select
-          local.set $8
-          loop $while-continue|1
-           local.get $2
-           local.get $8
-           i32.gt_s
-           if
-            block $~lib/util/string/codePointBefore|inlined.0 (result i32)
-             local.get $2
-             local.set $1
-             i32.const -1
-             local.get $2
-             i32.const 0
-             i32.le_s
-             br_if $~lib/util/string/codePointBefore|inlined.0
-             drop
-             local.get $4
-             local.get $1
-             i32.const 1
-             i32.sub
-             i32.const 1
-             i32.shl
-             i32.add
-             i32.load16_u
-             local.tee $3
-             i32.const 64512
-             i32.and
-             i32.const 56320
-             i32.eq
-             local.get $1
-             i32.const 2
-             i32.sub
-             i32.const 0
-             i32.ge_s
-             i32.and
-             if
-              local.get $4
-              local.get $1
-              i32.const 2
-              i32.sub
-              i32.const 1
-              i32.shl
-              i32.add
-              i32.load16_u
-              local.tee $1
-              i32.const 64512
-              i32.and
-              i32.const 55296
-              i32.eq
-              if
-               local.get $3
-               i32.const 1023
-               i32.and
-               local.get $1
-               i32.const 1023
-               i32.and
-               i32.const 10
-               i32.shl
-               i32.add
-               i32.const 65536
-               i32.add
-               br $~lib/util/string/codePointBefore|inlined.0
-              end
-             end
-             i32.const 65533
-             local.get $3
-             local.get $3
-             i32.const 63488
-             i32.and
-             i32.const 55296
-             i32.eq
-             select
-            end
-            local.tee $1
-            local.set $3
-            local.get $1
-            i32.const 918000
-            i32.lt_u
-            if (result i32)
-             i32.const 6658
-             local.get $3
-             call $~lib/util/string/stagedBinaryLookup
-            else
-             i32.const 0
-            end
-            i32.eqz
-            if
-             i32.const 0
-             local.get $1
-             i32.const 127370
-             i32.lt_u
-             if (result i32)
-              i32.const 9666
-              local.get $1
-              call $~lib/util/string/stagedBinaryLookup
-             else
-              i32.const 0
-             end
-             i32.eqz
-             br_if $~lib/util/string/isFinalSigma|inlined.0
-             drop
-             i32.const 1
-             local.set $9
-            end
-            local.get $2
-            local.get $1
-            i32.const 65536
-            i32.ge_s
-            i32.const 1
-            i32.add
-            i32.sub
-            local.set $2
-            br $while-continue|1
-           end
-          end
-          i32.const 0
-          local.get $9
-          i32.eqz
-          br_if $~lib/util/string/isFinalSigma|inlined.0
-          drop
-          i32.const 1
-          i32.add
-          local.tee $2
-          i32.const 30
-          i32.add
-          local.tee $1
-          local.get $7
-          local.get $1
-          local.get $7
-          i32.lt_s
-          select
-          local.set $6
-          loop $while-continue|2
-           local.get $2
-           local.get $6
-           i32.lt_s
-           if
-            local.get $4
-            local.get $2
-            i32.const 1
-            i32.shl
-            i32.add
-            i32.load16_u
-            local.tee $1
-            i32.const 64512
-            i32.and
-            i32.const 55296
-            i32.eq
-            local.get $7
-            local.get $2
-            i32.const 1
-            i32.add
-            i32.ne
-            i32.and
-            if
-             local.get $4
-             local.get $2
-             i32.const 1
-             i32.shl
-             i32.add
-             i32.load16_u offset=2
-             local.tee $3
-             i32.const 64512
-             i32.and
-             i32.const 56320
-             i32.eq
-             if
-              local.get $1
-              i32.const 10
-              i32.shl
-              local.get $3
-              i32.add
-              i32.const -56613888
-              i32.add
-              local.set $1
-             end
-            end
-            local.get $1
-            local.tee $3
-            i32.const 918000
-            i32.lt_u
-            if (result i32)
-             i32.const 6658
-             local.get $3
-             call $~lib/util/string/stagedBinaryLookup
-            else
-             i32.const 0
-            end
-            i32.eqz
-            if
-             local.get $3
-             local.tee $2
-             i32.const 127370
-             i32.lt_u
-             if (result i32)
-              i32.const 9666
-              local.get $2
-              call $~lib/util/string/stagedBinaryLookup
-             else
-              i32.const 0
-             end
-             i32.eqz
-             br $~lib/util/string/isFinalSigma|inlined.0
-            end
-            local.get $2
-            local.get $3
-            i32.const 65536
-            i32.ge_u
-            i32.const 1
-            i32.add
-            i32.add
-            local.set $2
-            br $while-continue|2
-           end
-          end
-          i32.const 1
-         end
+         local.get $0
+         local.get $5
+         local.get $4
+         call $~lib/util/string/isFinalSigma
         else
          i32.const 0
         end
@@ -2702,8 +2692,8 @@
         i32.const 25
         i32.le_u
         if
-         local.get $10
-         local.get $11
+         local.get $6
+         local.get $7
          i32.const 1
          i32.shl
          i32.add
@@ -2721,16 +2711,16 @@
          i32.const 65536
          i32.lt_s
          if
-          local.get $10
-          local.get $11
+          local.get $6
+          local.get $7
           i32.const 1
           i32.shl
           i32.add
           local.get $2
           i32.store16
          else
-          local.get $10
-          local.get $11
+          local.get $6
+          local.get $7
           i32.const 1
           i32.shl
           i32.add
@@ -2751,18 +2741,18 @@
           i32.shl
           i32.or
           i32.store
-          local.get $11
+          local.get $7
           i32.const 1
           i32.add
-          local.set $11
+          local.set $7
          end
         end
        end
       end
      end
     else
-     local.get $10
-     local.get $11
+     local.get $6
+     local.get $7
      i32.const 1
      i32.shl
      i32.add
@@ -2772,8 +2762,6 @@
      i32.sub
      i32.const 26
      i32.lt_u
-     i32.const 0
-     i32.ne
      i32.const 5
      i32.shl
      i32.or
@@ -2783,15 +2771,15 @@
     i32.const 1
     i32.add
     local.set $5
-    local.get $11
+    local.get $7
     i32.const 1
     i32.add
-    local.set $11
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $10
-  local.get $11
+  local.get $6
+  local.get $7
   i32.const 1
   i32.shl
   call $~lib/rt/tlsf/__realloc
@@ -2811,13 +2799,17 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 2
   local.get $0
   i32.const 65535
   i32.gt_s
   local.tee $2
   i32.shl
-  call $~lib/rt/tlsf/__alloc
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $1
   local.get $2
   if
@@ -2850,10 +2842,16 @@
  (func $~lib/string/String#codePointAt (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
-  local.get $1
   local.get $0
-  call $~lib/string/String#get:length
-  local.tee $3
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $2
+  local.set $3
+  local.get $1
+  local.get $2
   i32.ge_u
   if
    i32.const -1
@@ -2898,10 +2896,10 @@
    local.get $2
    return
   end
+  local.get $0
   local.get $2
   i32.const 10
   i32.shl
-  local.get $0
   i32.add
   i32.const -56613888
   i32.add
@@ -2922,6 +2920,7 @@
   i64.const 4294967295
   i64.le_u
   if
+   call $~lib/rt/tlsf/maybeInitialize
    local.get $0
    i32.wrap_i64
    local.tee $1
@@ -2967,7 +2966,10 @@
    local.tee $2
    i32.const 1
    i32.shl
-   call $~lib/rt/tlsf/__alloc
+   i32.const 1
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    local.tee $4
    local.set $3
    loop $do-continue|0
@@ -2995,6 +2997,7 @@
     br_if $do-continue|0
    end
   else
+   call $~lib/rt/tlsf/maybeInitialize
    local.get $0
    i64.const 100000000000
    i64.ge_u
@@ -3042,10 +3045,13 @@
    local.tee $1
    i32.const 1
    i32.shl
-   call $~lib/rt/tlsf/__alloc
+   i32.const 1
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    local.tee $4
    local.set $2
-   loop $do-continue|00
+   loop $do-continue|01
     local.get $0
     i64.const 10
     i64.rem_u
@@ -3070,88 +3076,114 @@
     local.get $0
     i64.const 0
     i64.ne
-    br_if $do-continue|00
+    br_if $do-continue|01
    end
   end
   local.get $4
   call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $__inlined_func$~lib/string/String#concat (result i32)
-   local.get $0
-   i32.const 18336
-   local.get $0
-   select
-   local.set $2
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.tee $1
+  i32.eqz
+  if
    local.get $1
-   call $~lib/rt/pure/__retain
-   local.tee $0
-   i32.eqz
+   i32.const 18336
+   i32.ne
    if
-    local.get $0
-    i32.const 18336
-    i32.ne
+    local.get $1
+    i32.const 18616
+    i32.gt_u
     if
-     local.get $0
-     call $~lib/rt/pure/__release
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
     end
-    i32.const 18336
-    local.set $0
    end
-   local.get $2
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $3
-   local.get $0
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $4
-   i32.add
-   local.tee $1
-   i32.eqz
+   i32.const 18336
+   local.set $1
+  end
+  local.get $1
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $4
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $2
+  i32.add
+  local.tee $3
+  i32.eqz
+  if
+   local.get $1
+   i32.const 18616
+   i32.gt_u
    if
-    local.get $0
-    call $~lib/rt/pure/__release
-    i32.const 1040
-    br $__inlined_func$~lib/string/String#concat
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
    end
+   i32.const 1040
+   return
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  local.get $0
+  local.get $2
+  call $~lib/util/memory/memmove
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $1
+  local.get $4
+  call $~lib/util/memory/memmove
+  local.get $1
+  i32.const 18616
+  i32.gt_u
+  if
    local.get $1
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.tee $1
-   local.get $2
-   local.get $3
-   call $~lib/memory/memory.copy
-   local.get $1
-   local.get $3
-   i32.add
-   local.get $0
-   local.get $4
-   call $~lib/memory/memory.copy
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
+  local.get $3
  )
  (func $start:std/string-casemapping
   (local $0 i64)
   (local $1 i64)
   (local $2 i64)
   (local $3 i32)
-  (local $4 i64)
+  (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i64)
+  (local $6 i64)
+  (local $7 i32)
   (local $8 i32)
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
+  (local $12 i64)
   (local $13 i32)
   (local $14 i32)
   (local $15 i32)
@@ -3238,9 +3270,10 @@
   (local $96 i32)
   (local $97 i32)
   (local $98 i32)
+  (local $99 i32)
   i32.const 1040
   call $~lib/string/String#toUpperCase
-  local.tee $13
+  local.tee $14
   i32.const 1040
   call $~lib/string/String.__eq
   i32.eqz
@@ -3254,7 +3287,7 @@
   end
   i32.const 1040
   call $~lib/string/String#toLowerCase
-  local.tee $14
+  local.tee $15
   i32.const 1040
   call $~lib/string/String.__eq
   i32.eqz
@@ -3268,7 +3301,7 @@
   end
   i32.const 11264
   call $~lib/string/String#toUpperCase
-  local.tee $15
+  local.tee $16
   i32.const 11312
   call $~lib/string/String.__eq
   i32.eqz
@@ -3282,7 +3315,7 @@
   end
   i32.const 11360
   call $~lib/string/String#toLowerCase
-  local.tee $16
+  local.tee $17
   i32.const 11408
   call $~lib/string/String.__eq
   i32.eqz
@@ -3296,7 +3329,7 @@
   end
   i32.const 11456
   call $~lib/string/String#toUpperCase
-  local.tee $17
+  local.tee $18
   i32.const 11552
   call $~lib/string/String.__eq
   i32.eqz
@@ -3310,7 +3343,7 @@
   end
   i32.const 11552
   call $~lib/string/String#toLowerCase
-  local.tee $18
+  local.tee $19
   i32.const 11648
   call $~lib/string/String.__eq
   i32.eqz
@@ -3324,7 +3357,7 @@
   end
   i32.const 11744
   call $~lib/string/String#toUpperCase
-  local.tee $19
+  local.tee $20
   i32.const 11808
   call $~lib/string/String.__eq
   i32.eqz
@@ -3338,7 +3371,7 @@
   end
   i32.const 11808
   call $~lib/string/String#toLowerCase
-  local.tee $20
+  local.tee $21
   i32.const 11872
   call $~lib/string/String.__eq
   i32.eqz
@@ -3352,7 +3385,7 @@
   end
   i32.const 11936
   call $~lib/string/String#toUpperCase
-  local.tee $21
+  local.tee $22
   i32.const 12032
   call $~lib/string/String.__eq
   i32.eqz
@@ -3366,7 +3399,7 @@
   end
   i32.const 12032
   call $~lib/string/String#toLowerCase
-  local.tee $22
+  local.tee $23
   i32.const 12128
   call $~lib/string/String.__eq
   i32.eqz
@@ -3380,7 +3413,7 @@
   end
   i32.const 12224
   call $~lib/string/String#toUpperCase
-  local.tee $23
+  local.tee $24
   i32.const 12320
   call $~lib/string/String.__eq
   i32.eqz
@@ -3394,7 +3427,7 @@
   end
   i32.const 12320
   call $~lib/string/String#toLowerCase
-  local.tee $24
+  local.tee $25
   i32.const 12416
   call $~lib/string/String.__eq
   i32.eqz
@@ -3408,7 +3441,7 @@
   end
   i32.const 12512
   call $~lib/string/String#toUpperCase
-  local.tee $25
+  local.tee $26
   i32.const 12576
   call $~lib/string/String.__eq
   i32.eqz
@@ -3422,7 +3455,7 @@
   end
   i32.const 12640
   call $~lib/string/String#toUpperCase
-  local.tee $26
+  local.tee $27
   i32.const 12704
   call $~lib/string/String.__eq
   i32.eqz
@@ -3436,7 +3469,7 @@
   end
   i32.const 12784
   call $~lib/string/String#toUpperCase
-  local.tee $27
+  local.tee $28
   i32.const 12848
   call $~lib/string/String.__eq
   i32.eqz
@@ -3450,7 +3483,7 @@
   end
   i32.const 12912
   call $~lib/string/String#toUpperCase
-  local.tee $28
+  local.tee $29
   i32.const 12992
   call $~lib/string/String.__eq
   i32.eqz
@@ -3464,7 +3497,7 @@
   end
   i32.const 13072
   call $~lib/string/String#toUpperCase
-  local.tee $29
+  local.tee $30
   i32.const 13136
   call $~lib/string/String.__eq
   i32.eqz
@@ -3478,7 +3511,7 @@
   end
   i32.const 13200
   call $~lib/string/String#toUpperCase
-  local.tee $30
+  local.tee $31
   i32.const 13264
   call $~lib/string/String.__eq
   i32.eqz
@@ -3492,7 +3525,7 @@
   end
   i32.const 13328
   call $~lib/string/String#toUpperCase
-  local.tee $31
+  local.tee $32
   i32.const 13408
   call $~lib/string/String.__eq
   i32.eqz
@@ -3506,7 +3539,7 @@
   end
   i32.const 13488
   call $~lib/string/String#toUpperCase
-  local.tee $32
+  local.tee $33
   i32.const 13568
   call $~lib/string/String.__eq
   i32.eqz
@@ -3520,7 +3553,7 @@
   end
   i32.const 13648
   call $~lib/string/String#toUpperCase
-  local.tee $33
+  local.tee $34
   i32.const 13792
   call $~lib/string/String.__eq
   i32.eqz
@@ -3534,7 +3567,7 @@
   end
   i32.const 13648
   call $~lib/string/String#toLowerCase
-  local.tee $34
+  local.tee $35
   i32.const 13936
   call $~lib/string/String.__eq
   i32.eqz
@@ -3548,7 +3581,7 @@
   end
   i32.const 14080
   call $~lib/string/String#toUpperCase
-  local.tee $35
+  local.tee $36
   i32.const 14112
   call $~lib/string/String.__eq
   i32.eqz
@@ -3562,7 +3595,7 @@
   end
   i32.const 14144
   call $~lib/string/String#toLowerCase
-  local.tee $36
+  local.tee $37
   i32.const 14176
   call $~lib/string/String.__eq
   i32.eqz
@@ -3576,7 +3609,7 @@
   end
   i32.const 14208
   call $~lib/string/String#toUpperCase
-  local.tee $37
+  local.tee $38
   i32.const 14400
   call $~lib/string/String.__eq
   i32.eqz
@@ -3590,9 +3623,9 @@
   end
   i32.const 14080
   call $~lib/string/String#toUpperCase
-  local.tee $38
-  call $~lib/string/String#toLowerCase
   local.tee $39
+  call $~lib/string/String#toLowerCase
+  local.tee $40
   i32.const 14608
   call $~lib/string/String.__eq
   i32.eqz
@@ -3606,9 +3639,9 @@
   end
   i32.const 14640
   call $~lib/string/String#toUpperCase
-  local.tee $40
-  call $~lib/string/String#toLowerCase
   local.tee $41
+  call $~lib/string/String#toLowerCase
+  local.tee $42
   i32.const 14672
   call $~lib/string/String.__eq
   i32.eqz
@@ -3622,9 +3655,9 @@
   end
   i32.const 14704
   call $~lib/string/String#toUpperCase
-  local.tee $42
-  call $~lib/string/String#toLowerCase
   local.tee $43
+  call $~lib/string/String#toLowerCase
+  local.tee $44
   i32.const 14704
   call $~lib/string/String.__eq
   i32.eqz
@@ -3638,9 +3671,9 @@
   end
   i32.const 65536
   call $~lib/string/String.fromCodePoint
-  local.tee $44
-  call $~lib/string/String#toLowerCase
   local.tee $45
+  call $~lib/string/String#toLowerCase
+  local.tee $46
   i32.const 14960
   call $~lib/string/String.__eq
   i32.eqz
@@ -3654,9 +3687,9 @@
   end
   i32.const 65536
   call $~lib/string/String.fromCodePoint
-  local.tee $46
-  call $~lib/string/String#toUpperCase
   local.tee $47
+  call $~lib/string/String#toUpperCase
+  local.tee $48
   i32.const 14960
   call $~lib/string/String.__eq
   i32.eqz
@@ -3670,7 +3703,7 @@
   end
   i32.const 14992
   call $~lib/string/String#toLowerCase
-  local.tee $48
+  local.tee $49
   i32.const 15024
   call $~lib/string/String.__eq
   i32.eqz
@@ -3684,7 +3717,7 @@
   end
   i32.const 15056
   call $~lib/string/String#toLowerCase
-  local.tee $49
+  local.tee $50
   i32.const 15088
   call $~lib/string/String.__eq
   i32.eqz
@@ -3698,7 +3731,7 @@
   end
   i32.const 15120
   call $~lib/string/String#toLowerCase
-  local.tee $50
+  local.tee $51
   i32.const 15152
   call $~lib/string/String.__eq
   i32.eqz
@@ -3712,7 +3745,7 @@
   end
   i32.const 15184
   call $~lib/string/String#toLowerCase
-  local.tee $51
+  local.tee $52
   i32.const 15216
   call $~lib/string/String.__eq
   i32.eqz
@@ -3726,7 +3759,7 @@
   end
   i32.const 15248
   call $~lib/string/String#toLowerCase
-  local.tee $52
+  local.tee $53
   i32.const 15280
   call $~lib/string/String.__eq
   i32.eqz
@@ -3740,7 +3773,7 @@
   end
   i32.const 15312
   call $~lib/string/String#toLowerCase
-  local.tee $53
+  local.tee $54
   i32.const 15344
   call $~lib/string/String.__eq
   i32.eqz
@@ -3754,7 +3787,7 @@
   end
   i32.const 15376
   call $~lib/string/String#toLowerCase
-  local.tee $54
+  local.tee $55
   i32.const 15408
   call $~lib/string/String.__eq
   i32.eqz
@@ -3768,7 +3801,7 @@
   end
   i32.const 15440
   call $~lib/string/String#toLowerCase
-  local.tee $55
+  local.tee $56
   i32.const 15472
   call $~lib/string/String.__eq
   i32.eqz
@@ -3782,7 +3815,7 @@
   end
   i32.const 15504
   call $~lib/string/String#toLowerCase
-  local.tee $56
+  local.tee $57
   i32.const 15536
   call $~lib/string/String.__eq
   i32.eqz
@@ -3796,7 +3829,7 @@
   end
   i32.const 15568
   call $~lib/string/String#toLowerCase
-  local.tee $57
+  local.tee $58
   i32.const 15600
   call $~lib/string/String.__eq
   i32.eqz
@@ -3810,7 +3843,7 @@
   end
   i32.const 15632
   call $~lib/string/String#toLowerCase
-  local.tee $58
+  local.tee $59
   i32.const 15664
   call $~lib/string/String.__eq
   i32.eqz
@@ -3824,7 +3857,7 @@
   end
   i32.const 15696
   call $~lib/string/String#toLowerCase
-  local.tee $59
+  local.tee $60
   i32.const 15728
   call $~lib/string/String.__eq
   i32.eqz
@@ -3838,7 +3871,7 @@
   end
   i32.const 15760
   call $~lib/string/String#toLowerCase
-  local.tee $60
+  local.tee $61
   i32.const 15792
   call $~lib/string/String.__eq
   i32.eqz
@@ -3852,7 +3885,7 @@
   end
   i32.const 15824
   call $~lib/string/String#toLowerCase
-  local.tee $61
+  local.tee $62
   i32.const 15856
   call $~lib/string/String.__eq
   i32.eqz
@@ -3866,7 +3899,7 @@
   end
   i32.const 15888
   call $~lib/string/String#toLowerCase
-  local.tee $62
+  local.tee $63
   i32.const 15920
   call $~lib/string/String.__eq
   i32.eqz
@@ -3880,7 +3913,7 @@
   end
   i32.const 15952
   call $~lib/string/String#toLowerCase
-  local.tee $63
+  local.tee $64
   i32.const 15984
   call $~lib/string/String.__eq
   i32.eqz
@@ -3894,7 +3927,7 @@
   end
   i32.const 16016
   call $~lib/string/String#toLowerCase
-  local.tee $64
+  local.tee $65
   i32.const 16048
   call $~lib/string/String.__eq
   i32.eqz
@@ -3908,7 +3941,7 @@
   end
   i32.const 16080
   call $~lib/string/String#toLowerCase
-  local.tee $65
+  local.tee $66
   i32.const 16112
   call $~lib/string/String.__eq
   i32.eqz
@@ -3922,7 +3955,7 @@
   end
   i32.const 16144
   call $~lib/string/String#toLowerCase
-  local.tee $66
+  local.tee $67
   i32.const 16176
   call $~lib/string/String.__eq
   i32.eqz
@@ -3936,7 +3969,7 @@
   end
   i32.const 16208
   call $~lib/string/String#toLowerCase
-  local.tee $67
+  local.tee $68
   i32.const 16240
   call $~lib/string/String.__eq
   i32.eqz
@@ -3950,7 +3983,7 @@
   end
   i32.const 16272
   call $~lib/string/String#toLowerCase
-  local.tee $68
+  local.tee $69
   i32.const 16304
   call $~lib/string/String.__eq
   i32.eqz
@@ -3964,7 +3997,7 @@
   end
   i32.const 16336
   call $~lib/string/String#toLowerCase
-  local.tee $69
+  local.tee $70
   i32.const 16368
   call $~lib/string/String.__eq
   i32.eqz
@@ -3978,7 +4011,7 @@
   end
   i32.const 16400
   call $~lib/string/String#toLowerCase
-  local.tee $70
+  local.tee $71
   i32.const 16432
   call $~lib/string/String.__eq
   i32.eqz
@@ -3992,7 +4025,7 @@
   end
   i32.const 16464
   call $~lib/string/String#toLowerCase
-  local.tee $71
+  local.tee $72
   i32.const 16496
   call $~lib/string/String.__eq
   i32.eqz
@@ -4006,7 +4039,7 @@
   end
   i32.const 16528
   call $~lib/string/String#toLowerCase
-  local.tee $72
+  local.tee $73
   i32.const 16560
   call $~lib/string/String.__eq
   i32.eqz
@@ -4020,7 +4053,7 @@
   end
   i32.const 16592
   call $~lib/string/String#toLowerCase
-  local.tee $73
+  local.tee $74
   i32.const 15664
   call $~lib/string/String.__eq
   i32.eqz
@@ -4034,7 +4067,7 @@
   end
   i32.const 16624
   call $~lib/string/String#toLowerCase
-  local.tee $74
+  local.tee $75
   i32.const 16656
   call $~lib/string/String.__eq
   i32.eqz
@@ -4048,7 +4081,7 @@
   end
   i32.const 16688
   call $~lib/string/String#toLowerCase
-  local.tee $75
+  local.tee $76
   i32.const 16720
   call $~lib/string/String.__eq
   i32.eqz
@@ -4062,7 +4095,7 @@
   end
   i32.const 16752
   call $~lib/string/String#toLowerCase
-  local.tee $76
+  local.tee $77
   i32.const 16784
   call $~lib/string/String.__eq
   i32.eqz
@@ -4076,7 +4109,7 @@
   end
   i32.const 16816
   call $~lib/string/String#toLowerCase
-  local.tee $77
+  local.tee $78
   i32.const 16848
   call $~lib/string/String.__eq
   i32.eqz
@@ -4090,7 +4123,7 @@
   end
   i32.const 16880
   call $~lib/string/String#toLowerCase
-  local.tee $78
+  local.tee $79
   i32.const 16912
   call $~lib/string/String.__eq
   i32.eqz
@@ -4104,7 +4137,7 @@
   end
   i32.const 16944
   call $~lib/string/String#toLowerCase
-  local.tee $79
+  local.tee $80
   i32.const 16976
   call $~lib/string/String.__eq
   i32.eqz
@@ -4118,7 +4151,7 @@
   end
   i32.const 17008
   call $~lib/string/String#toLowerCase
-  local.tee $80
+  local.tee $81
   i32.const 17040
   call $~lib/string/String.__eq
   i32.eqz
@@ -4132,7 +4165,7 @@
   end
   i32.const 17072
   call $~lib/string/String#toLowerCase
-  local.tee $81
+  local.tee $82
   i32.const 17104
   call $~lib/string/String.__eq
   i32.eqz
@@ -4146,7 +4179,7 @@
   end
   i32.const 17136
   call $~lib/string/String#toLowerCase
-  local.tee $82
+  local.tee $83
   i32.const 17168
   call $~lib/string/String.__eq
   i32.eqz
@@ -4160,7 +4193,7 @@
   end
   i32.const 17200
   call $~lib/string/String#toLowerCase
-  local.tee $83
+  local.tee $84
   i32.const 17232
   call $~lib/string/String.__eq
   i32.eqz
@@ -4174,7 +4207,7 @@
   end
   i32.const 17264
   call $~lib/string/String#toLowerCase
-  local.tee $84
+  local.tee $85
   i32.const 17296
   call $~lib/string/String.__eq
   i32.eqz
@@ -4188,7 +4221,7 @@
   end
   i32.const 17328
   call $~lib/string/String#toLowerCase
-  local.tee $85
+  local.tee $86
   i32.const 17360
   call $~lib/string/String.__eq
   i32.eqz
@@ -4202,7 +4235,7 @@
   end
   i32.const 17392
   call $~lib/string/String#toUpperCase
-  local.tee $86
+  local.tee $87
   i32.const 17424
   call $~lib/string/String.__eq
   i32.eqz
@@ -4216,7 +4249,7 @@
   end
   i32.const 14640
   call $~lib/string/String#toUpperCase
-  local.tee $87
+  local.tee $88
   i32.const 17456
   call $~lib/string/String.__eq
   i32.eqz
@@ -4230,7 +4263,7 @@
   end
   i32.const 17488
   call $~lib/string/String#toUpperCase
-  local.tee $88
+  local.tee $89
   i32.const 17520
   call $~lib/string/String.__eq
   i32.eqz
@@ -4244,7 +4277,7 @@
   end
   i32.const 17552
   call $~lib/string/String#toUpperCase
-  local.tee $89
+  local.tee $90
   i32.const 17584
   call $~lib/string/String.__eq
   i32.eqz
@@ -4258,7 +4291,7 @@
   end
   i32.const 17616
   call $~lib/string/String#toUpperCase
-  local.tee $90
+  local.tee $91
   i32.const 17648
   call $~lib/string/String.__eq
   i32.eqz
@@ -4272,7 +4305,7 @@
   end
   i32.const 17680
   call $~lib/string/String#toUpperCase
-  local.tee $91
+  local.tee $92
   i32.const 17712
   call $~lib/string/String.__eq
   i32.eqz
@@ -4286,7 +4319,7 @@
   end
   i32.const 17744
   call $~lib/string/String#toUpperCase
-  local.tee $92
+  local.tee $93
   i32.const 17712
   call $~lib/string/String.__eq
   i32.eqz
@@ -4300,7 +4333,7 @@
   end
   i32.const 17776
   call $~lib/string/String#toUpperCase
-  local.tee $93
+  local.tee $94
   i32.const 17808
   call $~lib/string/String.__eq
   i32.eqz
@@ -4314,7 +4347,7 @@
   end
   i32.const 17840
   call $~lib/string/String#toUpperCase
-  local.tee $94
+  local.tee $95
   i32.const 17872
   call $~lib/string/String.__eq
   i32.eqz
@@ -4328,7 +4361,7 @@
   end
   i32.const 17904
   call $~lib/string/String#toUpperCase
-  local.tee $95
+  local.tee $96
   i32.const 17936
   call $~lib/string/String.__eq
   i32.eqz
@@ -4342,7 +4375,7 @@
   end
   i32.const 17968
   call $~lib/string/String#toUpperCase
-  local.tee $96
+  local.tee $97
   i32.const 18000
   call $~lib/string/String.__eq
   i32.eqz
@@ -4356,7 +4389,7 @@
   end
   i32.const 18032
   call $~lib/string/String#toUpperCase
-  local.tee $97
+  local.tee $98
   i32.const 18064
   call $~lib/string/String.__eq
   i32.eqz
@@ -4370,7 +4403,7 @@
   end
   i32.const 18096
   call $~lib/string/String#toUpperCase
-  local.tee $98
+  local.tee $99
   i32.const 18128
   call $~lib/string/String.__eq
   i32.eqz
@@ -4389,18 +4422,18 @@
    if
     local.get $3
     call $~lib/string/String.fromCodePoint
-    local.tee $12
+    local.tee $11
     call $~lib/string/String#toLowerCase
-    local.set $5
-    local.get $12
+    local.set $7
+    local.get $11
     call $~lib/string/String#toUpperCase
-    local.set $6
-    local.get $5
+    local.set $8
+    local.get $7
     i32.const 0
     call $~lib/string/String#codePointAt
     i64.extend_i32_s
-    local.set $4
-    local.get $5
+    local.set $6
+    local.get $7
     i32.const 1
     call $~lib/string/String#codePointAt
     i64.extend_i32_s
@@ -4408,14 +4441,14 @@
     i64.const 0
     i64.ge_u
     if
-     local.get $4
+     local.get $6
      local.get $0
      i64.const 16
      i64.shl
      i64.add
-     local.set $4
+     local.set $6
     end
-    local.get $5
+    local.get $7
     i32.const 2
     call $~lib/string/String#codePointAt
     i64.extend_i32_s
@@ -4423,19 +4456,19 @@
     i64.const 0
     i64.ge_u
     if
-     local.get $4
+     local.get $6
      local.get $0
      i64.const 32
      i64.shl
      i64.add
-     local.set $4
+     local.set $6
     end
-    local.get $6
+    local.get $8
     i32.const 0
     call $~lib/string/String#codePointAt
     i64.extend_i32_s
     local.set $0
-    local.get $6
+    local.get $8
     i32.const 1
     call $~lib/string/String#codePointAt
     i64.extend_i32_s
@@ -4450,7 +4483,7 @@
      i64.add
      local.set $0
     end
-    local.get $6
+    local.get $8
     i32.const 2
     call $~lib/string/String#codePointAt
     i64.extend_i32_s
@@ -4509,12 +4542,12 @@
     i32.const 1
     call $std/string-casemapping/toUpperCaseFromIndex
     i64.extend_i32_s
-    local.tee $7
+    local.tee $12
     i64.const 0
     i64.ge_u
     if
      local.get $2
-     local.get $7
+     local.get $12
      i64.const 16
      i64.shl
      i64.add
@@ -4524,19 +4557,19 @@
     i32.const 2
     call $std/string-casemapping/toUpperCaseFromIndex
     i64.extend_i32_s
-    local.tee $7
+    local.tee $12
     i64.const 0
     i64.ge_u
     if
      local.get $2
-     local.get $7
+     local.get $12
      i64.const 32
      i64.shl
      i64.add
      local.set $2
     end
     local.get $1
-    local.get $4
+    local.get $6
     i64.ne
     if
      i32.const 18160
@@ -4549,11 +4582,13 @@
      f64.const 0
      call $~lib/builtins/trace
      i32.const 18240
-     local.get $4
+     local.get $6
      call $~lib/util/number/utoa64
-     local.tee $8
-     call $~lib/string/String.__concat
      local.tee $9
+     call $~lib/string/String#concat
+     local.tee $4
+     local.set $10
+     local.get $4
      i32.const 0
      f64.const 0
      f64.const 0
@@ -4561,12 +4596,16 @@
      f64.const 0
      f64.const 0
      call $~lib/builtins/trace
-     i32.const 18368
      local.get $1
      call $~lib/util/number/utoa64
-     local.tee $10
-     call $~lib/string/String.__concat
-     local.tee $11
+     local.tee $5
+     local.set $4
+     i32.const 18368
+     local.get $5
+     call $~lib/string/String#concat
+     local.tee $13
+     local.set $5
+     local.get $13
      i32.const 0
      f64.const 0
      f64.const 0
@@ -4574,14 +4613,42 @@
      f64.const 0
      f64.const 0
      call $~lib/builtins/trace
-     local.get $8
-     call $~lib/rt/pure/__release
      local.get $9
-     call $~lib/rt/pure/__release
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $9
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
      local.get $10
-     call $~lib/rt/pure/__release
-     local.get $11
-     call $~lib/rt/pure/__release
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $10
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $4
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $4
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $5
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
     end
     local.get $0
     local.get $2
@@ -4599,9 +4666,11 @@
      i32.const 18512
      local.get $0
      call $~lib/util/number/utoa64
-     local.tee $8
-     call $~lib/string/String.__concat
      local.tee $9
+     call $~lib/string/String#concat
+     local.tee $4
+     local.set $10
+     local.get $4
      i32.const 0
      f64.const 0
      f64.const 0
@@ -4609,12 +4678,16 @@
      f64.const 0
      f64.const 0
      call $~lib/builtins/trace
-     i32.const 18576
      local.get $2
      call $~lib/util/number/utoa64
-     local.tee $10
-     call $~lib/string/String.__concat
-     local.tee $11
+     local.tee $5
+     local.set $4
+     i32.const 18576
+     local.get $5
+     call $~lib/string/String#concat
+     local.tee $13
+     local.set $5
+     local.get $13
      i32.const 0
      f64.const 0
      f64.const 0
@@ -4622,21 +4695,70 @@
      f64.const 0
      f64.const 0
      call $~lib/builtins/trace
-     local.get $8
-     call $~lib/rt/pure/__release
      local.get $9
-     call $~lib/rt/pure/__release
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $9
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
      local.get $10
-     call $~lib/rt/pure/__release
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $10
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $4
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $4
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+     local.get $5
+     i32.const 18616
+     i32.gt_u
+     if
+      local.get $5
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+    end
+    local.get $11
+    i32.const 18616
+    i32.gt_u
+    if
      local.get $11
-     call $~lib/rt/pure/__release
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $7
+    i32.const 18616
+    i32.gt_u
+    if
+     local.get $7
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    local.get $8
+    i32.const 18616
+    i32.gt_u
+    if
+     local.get $8
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
     end
-    local.get $12
-    call $~lib/rt/pure/__release
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $6
-    call $~lib/rt/pure/__release
     local.get $3
     i32.const 1
     i32.add
@@ -4644,178 +4766,780 @@
     br $for-loop|0
    end
   end
-  local.get $13
-  call $~lib/rt/pure/__release
   local.get $14
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $14
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $15
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $15
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $16
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $16
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $17
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $17
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $18
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $18
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $19
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $19
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $20
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $20
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $21
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $21
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $22
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $23
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $23
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $24
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $25
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $26
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $27
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $28
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $29
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $29
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $30
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $30
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $31
-  call $~lib/rt/pure/__release
-  local.get $32
-  call $~lib/rt/pure/__release
-  local.get $33
-  call $~lib/rt/pure/__release
-  local.get $34
-  call $~lib/rt/pure/__release
-  local.get $35
-  call $~lib/rt/pure/__release
-  local.get $36
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $31
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $32
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $32
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $33
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $33
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $34
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $34
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $35
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $35
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $36
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $36
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $37
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $37
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $38
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $38
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $39
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $39
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $40
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $40
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $41
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $41
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $42
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $42
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $43
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $43
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $44
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $44
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $45
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $45
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $46
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $46
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $47
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $47
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $48
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $48
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $49
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $49
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $50
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $50
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $51
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $51
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $52
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $52
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $53
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $53
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $54
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $54
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $55
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $55
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $56
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $56
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $57
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $58
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $59
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $60
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $61
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $62
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $62
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $63
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $63
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $64
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $64
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $65
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $65
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $66
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $66
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $67
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $67
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $68
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $68
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $69
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $69
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $70
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $70
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $71
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $71
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $72
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $72
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $73
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $73
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $74
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $74
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $75
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $75
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $76
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $76
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $77
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $77
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $78
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $78
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $79
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $79
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $80
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $80
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $81
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $81
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $82
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $82
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $83
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $83
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $84
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $84
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $85
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $85
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $86
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $86
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $87
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $87
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $88
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $88
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $89
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $89
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $90
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $90
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $91
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $91
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $92
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $92
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $93
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $93
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $94
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $94
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $95
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $95
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $96
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $96
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $97
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $97
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $98
-  call $~lib/rt/pure/__release
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $98
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $99
+  i32.const 18616
+  i32.gt_u
+  if
+   local.get $99
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~start
   global.get $~started
diff --git a/tests/compiler/std/string-casemapping.untouched.wat b/tests/compiler/std/string-casemapping.untouched.wat
index 41c7e6ce04..11de72a4b7 100644
--- a/tests/compiler/std/string-casemapping.untouched.wat
+++ b/tests/compiler/std/string-casemapping.untouched.wat
@@ -1,15 +1,15 @@
 (module
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
  (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
+ (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -277,6 +277,69 @@
   end
   local.get $0
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -285,9 +348,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -300,7 +360,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -327,7 +387,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -381,7 +441,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -406,77 +466,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -493,6 +511,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -504,8 +528,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -513,7 +535,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -530,28 +552,18 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -562,44 +574,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -607,30 +609,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 96
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -649,22 +647,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -690,7 +688,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -702,18 +700,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 96
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -767,27 +765,15 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -802,24 +788,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -829,31 +801,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -861,8 +817,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -888,24 +842,22 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -913,7 +865,7 @@
    if
     i32.const 0
     i32.const 96
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -921,16 +873,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -946,7 +898,7 @@
    if
     i32.const 0
     i32.const 96
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -955,8 +907,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -967,49 +919,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -1022,10 +970,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -1075,73 +1019,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1154,11 +1071,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1178,7 +1095,7 @@
   if
    i32.const 144
    i32.const 96
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1204,9 +1121,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1274,31 +1188,24 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1311,79 +1218,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 96
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1420,9 +1296,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1436,12 +1310,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1451,7 +1325,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1488,7 +1362,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1539,29 +1413,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1581,7 +1435,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1628,7 +1482,7 @@
      if
       i32.const 0
       i32.const 96
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1649,7 +1503,7 @@
     if
      i32.const 0
      i32.const 96
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1670,7 +1524,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1713,6 +1567,81 @@
   i32.const 1
   i32.shr_u
  )
+ (func $~lib/util/string/isAscii (param $0 i32) (result i32)
+  local.get $0
+  i32.const 7
+  i32.shr_u
+  i32.eqz
+ )
+ (func $~lib/util/string/toUpper8 (param $0 i32) (result i32)
+  i32.const 0
+  i32.const 0
+  i32.gt_s
+  drop
+  i32.const 1024
+  local.get $0
+  i32.add
+  i32.load8_u
+  return
+ )
+ (func $~lib/util/casemap/bsearch (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  i32.const 0
+  local.set $3
+  loop $while-continue|0
+   local.get $3
+   local.get $2
+   i32.le_s
+   local.set $4
+   local.get $4
+   if
+    local.get $3
+    local.get $2
+    i32.add
+    i32.const 3
+    i32.shr_u
+    i32.const 2
+    i32.shl
+    local.set $5
+    local.get $1
+    local.get $5
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.get $0
+    i32.sub
+    local.set $6
+    local.get $6
+    i32.const 0
+    i32.eq
+    if
+     local.get $5
+     return
+    else
+     local.get $6
+     i32.const 31
+     i32.shr_u
+     if
+      local.get $5
+      i32.const 4
+      i32.add
+      local.set $3
+     else
+      local.get $5
+      i32.const 4
+      i32.sub
+      local.set $2
+     end
+    end
+    br $while-continue|0
+   end
+  end
+  i32.const -1
+ )
  (func $~lib/util/casemap/casemap (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -1944,7 +1873,7 @@
   if
    i32.const 0
    i32.const 96
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -2975,238 +2904,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   i32.const 0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
    i32.const 1
-   i32.lt_s
-   drop
-   local.get $4
-   local.get $3
+  else
+   local.get $0
+   local.get $2
    i32.add
-   local.get $5
+   local.get $1
    i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+  end
+  if
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   local.get $1
@@ -3257,22 +3181,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -3283,25 +3197,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
@@ -3370,10 +3284,6 @@
   (local $10 i32)
   (local $11 i32)
   (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 i32)
   local.get $0
   call $~lib/string/String#get:length
   local.set $1
@@ -3417,30 +3327,15 @@
      i32.load16_u
      local.set $8
      local.get $8
-     local.set $9
-     local.get $9
-     i32.const 7
-     i32.shr_u
-     i32.eqz
+     call $~lib/util/string/isAscii
      if
       local.get $2
       local.get $5
       i32.const 1
       i32.shl
       i32.add
-      block $~lib/util/string/toUpper8|inlined.0 (result i32)
-       local.get $8
-       local.set $9
-       i32.const 0
-       i32.const 0
-       i32.gt_s
-       drop
-       i32.const 1024
-       local.get $9
-       i32.add
-       i32.load8_u
-       br $~lib/util/string/toUpper8|inlined.0
-      end
+      local.get $8
+      call $~lib/util/string/toUpper8
       i32.store16
      else
       local.get $8
@@ -3544,66 +3439,10 @@
        i32.sub
        i32.le_u
        if
-        block $~lib/util/casemap/bsearch|inlined.0 (result i32)
-         local.get $8
-         local.set $12
-         local.get $3
-         local.set $11
-         local.get $4
-         local.set $10
-         i32.const 0
-         local.set $13
-         loop $while-continue|1
-          local.get $13
-          local.get $10
-          i32.le_s
-          local.set $14
-          local.get $14
-          if
-           local.get $13
-           local.get $10
-           i32.add
-           i32.const 3
-           i32.shr_u
-           i32.const 2
-           i32.shl
-           local.set $15
-           local.get $11
-           local.get $15
-           i32.const 1
-           i32.shl
-           i32.add
-           i32.load16_u
-           local.get $12
-           i32.sub
-           local.set $16
-           local.get $16
-           i32.const 0
-           i32.eq
-           if
-            local.get $15
-            br $~lib/util/casemap/bsearch|inlined.0
-           else
-            local.get $16
-            i32.const 31
-            i32.shr_u
-            if
-             local.get $15
-             i32.const 4
-             i32.add
-             local.set $13
-            else
-             local.get $15
-             i32.const 4
-             i32.sub
-             local.set $10
-            end
-           end
-           br $while-continue|1
-          end
-         end
-         i32.const -1
-        end
+        local.get $8
+        local.get $3
+        local.get $4
+        call $~lib/util/casemap/bsearch
         local.set $9
        end
        local.get $9
@@ -3616,31 +3455,31 @@
         i32.shl
         i32.add
         i32.load offset=2
-        local.set $13
+        local.set $10
         local.get $3
         local.get $9
         i32.const 1
         i32.shl
         i32.add
         i32.load16_u offset=6
-        local.set $12
+        local.set $11
         local.get $2
         local.get $5
         i32.const 1
         i32.shl
         i32.add
-        local.get $13
+        local.get $10
         i32.store
         local.get $2
         local.get $5
         i32.const 1
         i32.shl
         i32.add
-        local.get $12
+        local.get $11
         i32.store16 offset=4
         local.get $5
         i32.const 1
-        local.get $12
+        local.get $11
         i32.const 0
         i32.ne
         i32.add
@@ -3652,8 +3491,8 @@
         call $~lib/util/casemap/casemap
         i32.const 2097151
         i32.and
-        local.set $12
-        local.get $12
+        local.set $11
+        local.get $11
         i32.const 65536
         i32.lt_s
         if
@@ -3662,32 +3501,32 @@
          i32.const 1
          i32.shl
          i32.add
-         local.get $12
+         local.get $11
          i32.store16
         else
-         local.get $12
+         local.get $11
          i32.const 65536
          i32.sub
-         local.set $12
-         local.get $12
+         local.set $11
+         local.get $11
          i32.const 10
          i32.shr_u
          i32.const 55296
          i32.or
-         local.set $13
-         local.get $12
+         local.set $10
+         local.get $11
          i32.const 1023
          i32.and
          i32.const 56320
          i32.or
-         local.set $11
+         local.set $12
          local.get $2
          local.get $5
          i32.const 1
          i32.shl
          i32.add
-         local.get $13
-         local.get $11
+         local.get $10
+         local.get $12
          i32.const 16
          i32.shl
          i32.or
@@ -3917,19 +3756,101 @@
    local.get $2
    return
   end
-  local.get $0
-  i32.const 0
-  local.get $1
-  i32.const 0
-  local.get $3
-  call $~lib/util/string/compareImpl
-  i32.eqz
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 0
+  local.get $1
+  i32.const 0
+  local.get $3
+  call $~lib/util/string/compareImpl
+  i32.eqz
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+ )
+ (func $~lib/util/string/toLower8 (param $0 i32) (result i32)
+  i32.const 0
+  i32.const 0
+  i32.gt_s
+  drop
+  i32.const 5778
+  local.get $0
+  i32.add
+  i32.load8_u
+  return
+ )
+ (func $~lib/util/string/codePointBefore (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.le_s
+  if
+   i32.const -1
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_u
+  local.set $2
+  local.get $2
+  i32.const 64512
+  i32.and
+  i32.const 56320
+  i32.eq
+  local.get $1
+  i32.const 2
+  i32.sub
+  i32.const 0
+  i32.ge_s
+  i32.and
+  if
+   local.get $0
+   local.get $1
+   i32.const 2
+   i32.sub
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.load16_u
+   local.set $3
+   local.get $3
+   i32.const 64512
+   i32.and
+   i32.const 55296
+   i32.eq
+   if
+    local.get $3
+    i32.const 1023
+    i32.and
+    i32.const 10
+    i32.shl
+    local.get $2
+    i32.const 1023
+    i32.and
+    i32.add
+    i32.const 65536
+    i32.add
+    return
+   end
+  end
   local.get $2
+  i32.const 63488
+  i32.and
+  i32.const 55296
+  i32.eq
+  if (result i32)
+   i32.const 65533
+  else
+   local.get $2
+  end
  )
  (func $~lib/util/string/stagedBinaryLookup (param $0 i32) (param $1 i32) (result i32)
   local.get $0
@@ -3956,6 +3877,186 @@
   i32.const 1
   i32.and
  )
+ (func $~lib/util/string/isCaseIgnorable (param $0 i32) (result i32)
+  local.get $0
+  i32.const 918000
+  i32.lt_u
+  if (result i32)
+   i32.const 5906
+   local.get $0
+   call $~lib/util/string/stagedBinaryLookup
+  else
+   i32.const 0
+  end
+ )
+ (func $~lib/util/string/isCased (param $0 i32) (result i32)
+  local.get $0
+  i32.const 127370
+  i32.lt_u
+  if (result i32)
+   i32.const 8914
+   local.get $0
+   call $~lib/util/string/stagedBinaryLookup
+  else
+   i32.const 0
+  end
+ )
+ (func $~lib/util/string/isFinalSigma (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  i32.const 0
+  local.set $3
+  local.get $1
+  local.set $4
+  i32.const 0
+  local.tee $5
+  local.get $4
+  i32.const 30
+  i32.sub
+  local.tee $6
+  local.get $5
+  local.get $6
+  i32.gt_s
+  select
+  local.set $7
+  loop $while-continue|0
+   local.get $4
+   local.get $7
+   i32.gt_s
+   local.set $5
+   local.get $5
+   if
+    local.get $0
+    local.get $4
+    call $~lib/util/string/codePointBefore
+    local.set $6
+    local.get $6
+    call $~lib/util/string/isCaseIgnorable
+    i32.eqz
+    if
+     local.get $6
+     call $~lib/util/string/isCased
+     if
+      i32.const 1
+      local.set $3
+     else
+      i32.const 0
+      return
+     end
+    end
+    local.get $4
+    local.get $6
+    i32.const 65536
+    i32.ge_s
+    i32.const 1
+    i32.add
+    i32.sub
+    local.set $4
+    br $while-continue|0
+   end
+  end
+  local.get $3
+  i32.eqz
+  if
+   i32.const 0
+   return
+  end
+  local.get $1
+  i32.const 1
+  i32.add
+  local.set $4
+  local.get $4
+  i32.const 30
+  i32.add
+  local.tee $5
+  local.get $2
+  local.tee $8
+  local.get $5
+  local.get $8
+  i32.lt_s
+  select
+  local.set $9
+  loop $while-continue|1
+   local.get $4
+   local.get $9
+   i32.lt_s
+   local.set $5
+   local.get $5
+   if
+    local.get $0
+    local.get $4
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.set $8
+    local.get $8
+    i32.const 64512
+    i32.and
+    i32.const 55296
+    i32.eq
+    local.get $4
+    i32.const 1
+    i32.add
+    local.get $2
+    i32.ne
+    i32.and
+    if
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.load16_u offset=2
+     local.set $10
+     local.get $10
+     i32.const 64512
+     i32.and
+     i32.const 56320
+     i32.eq
+     if
+      local.get $8
+      i32.const 55296
+      i32.sub
+      i32.const 10
+      i32.shl
+      local.get $10
+      i32.const 56320
+      i32.sub
+      i32.add
+      i32.const 65536
+      i32.add
+      local.set $8
+     end
+    end
+    local.get $8
+    call $~lib/util/string/isCaseIgnorable
+    i32.eqz
+    if
+     local.get $8
+     call $~lib/util/string/isCased
+     i32.eqz
+     return
+    end
+    local.get $4
+    local.get $8
+    i32.const 65536
+    i32.ge_u
+    i32.const 1
+    i32.add
+    i32.add
+    local.set $4
+    br $while-continue|1
+   end
+  end
+  i32.const 1
+ )
  (func $~lib/string/String#toLowerCase (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -3966,15 +4067,6 @@
   (local $7 i32)
   (local $8 i32)
   (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 i32)
-  (local $17 i32)
-  (local $18 i32)
   local.get $0
   call $~lib/string/String#get:length
   local.set $1
@@ -4013,30 +4105,15 @@
      i32.load16_u
      local.set $6
      local.get $6
-     local.set $7
-     local.get $7
-     i32.const 7
-     i32.shr_u
-     i32.eqz
+     call $~lib/util/string/isAscii
      if
       local.get $2
       local.get $3
       i32.const 1
       i32.shl
       i32.add
-      block $~lib/util/string/toLower8|inlined.0 (result i32)
-       local.get $6
-       local.set $7
-       i32.const 0
-       i32.const 0
-       i32.gt_s
-       drop
-       i32.const 5778
-       local.get $7
-       i32.add
-       i32.load8_u
-       br $~lib/util/string/toLower8|inlined.0
-      end
+      local.get $6
+      call $~lib/util/string/toLower8
       i32.store16
      else
       local.get $6
@@ -4142,270 +4219,10 @@
         i32.const 1
         i32.gt_u
         if (result i32)
-         block $~lib/util/string/isFinalSigma|inlined.0 (result i32)
-          local.get $0
-          local.set $10
-          local.get $4
-          local.set $9
-          local.get $1
-          local.set $8
-          i32.const 0
-          local.set $11
-          local.get $9
-          local.set $12
-          i32.const 0
-          local.tee $13
-          local.get $12
-          i32.const 30
-          i32.sub
-          local.tee $14
-          local.get $13
-          local.get $14
-          i32.gt_s
-          select
-          local.set $13
-          loop $while-continue|1
-           local.get $12
-           local.get $13
-           i32.gt_s
-           local.set $14
-           local.get $14
-           if
-            block $~lib/util/string/codePointBefore|inlined.0 (result i32)
-             local.get $10
-             local.set $16
-             local.get $12
-             local.set $15
-             local.get $15
-             i32.const 0
-             i32.le_s
-             if
-              i32.const -1
-              br $~lib/util/string/codePointBefore|inlined.0
-             end
-             local.get $16
-             local.get $15
-             i32.const 1
-             i32.sub
-             i32.const 1
-             i32.shl
-             i32.add
-             i32.load16_u
-             local.set $17
-             local.get $17
-             i32.const 64512
-             i32.and
-             i32.const 56320
-             i32.eq
-             local.get $15
-             i32.const 2
-             i32.sub
-             i32.const 0
-             i32.ge_s
-             i32.and
-             if
-              local.get $16
-              local.get $15
-              i32.const 2
-              i32.sub
-              i32.const 1
-              i32.shl
-              i32.add
-              i32.load16_u
-              local.set $18
-              local.get $18
-              i32.const 64512
-              i32.and
-              i32.const 55296
-              i32.eq
-              if
-               local.get $18
-               i32.const 1023
-               i32.and
-               i32.const 10
-               i32.shl
-               local.get $17
-               i32.const 1023
-               i32.and
-               i32.add
-               i32.const 65536
-               i32.add
-               br $~lib/util/string/codePointBefore|inlined.0
-              end
-             end
-             local.get $17
-             i32.const 63488
-             i32.and
-             i32.const 55296
-             i32.eq
-             if (result i32)
-              i32.const 65533
-             else
-              local.get $17
-             end
-            end
-            local.set $17
-            local.get $17
-            local.set $18
-            local.get $18
-            i32.const 918000
-            i32.lt_u
-            if (result i32)
-             i32.const 5906
-             local.get $18
-             call $~lib/util/string/stagedBinaryLookup
-            else
-             i32.const 0
-            end
-            i32.eqz
-            if
-             local.get $17
-             local.set $15
-             local.get $15
-             i32.const 127370
-             i32.lt_u
-             if (result i32)
-              i32.const 8914
-              local.get $15
-              call $~lib/util/string/stagedBinaryLookup
-             else
-              i32.const 0
-             end
-             if
-              i32.const 1
-              local.set $11
-             else
-              i32.const 0
-              br $~lib/util/string/isFinalSigma|inlined.0
-             end
-            end
-            local.get $12
-            local.get $17
-            i32.const 65536
-            i32.ge_s
-            i32.const 1
-            i32.add
-            i32.sub
-            local.set $12
-            br $while-continue|1
-           end
-          end
-          local.get $11
-          i32.eqz
-          if
-           i32.const 0
-           br $~lib/util/string/isFinalSigma|inlined.0
-          end
-          local.get $9
-          i32.const 1
-          i32.add
-          local.set $12
-          local.get $12
-          i32.const 30
-          i32.add
-          local.tee $14
-          local.get $8
-          local.tee $15
-          local.get $14
-          local.get $15
-          i32.lt_s
-          select
-          local.set $14
-          loop $while-continue|2
-           local.get $12
-           local.get $14
-           i32.lt_s
-           local.set $15
-           local.get $15
-           if
-            local.get $10
-            local.get $12
-            i32.const 1
-            i32.shl
-            i32.add
-            i32.load16_u
-            local.set $18
-            local.get $18
-            i32.const 64512
-            i32.and
-            i32.const 55296
-            i32.eq
-            local.get $12
-            i32.const 1
-            i32.add
-            local.get $8
-            i32.ne
-            i32.and
-            if
-             local.get $10
-             local.get $12
-             i32.const 1
-             i32.shl
-             i32.add
-             i32.load16_u offset=2
-             local.set $16
-             local.get $16
-             i32.const 64512
-             i32.and
-             i32.const 56320
-             i32.eq
-             if
-              local.get $18
-              i32.const 55296
-              i32.sub
-              i32.const 10
-              i32.shl
-              local.get $16
-              i32.const 56320
-              i32.sub
-              i32.add
-              i32.const 65536
-              i32.add
-              local.set $18
-             end
-            end
-            local.get $18
-            local.set $16
-            local.get $16
-            i32.const 918000
-            i32.lt_u
-            if (result i32)
-             i32.const 5906
-             local.get $16
-             call $~lib/util/string/stagedBinaryLookup
-            else
-             i32.const 0
-            end
-            i32.eqz
-            if
-             local.get $18
-             local.set $16
-             local.get $16
-             i32.const 127370
-             i32.lt_u
-             if (result i32)
-              i32.const 8914
-              local.get $16
-              call $~lib/util/string/stagedBinaryLookup
-             else
-              i32.const 0
-             end
-             i32.eqz
-             br $~lib/util/string/isFinalSigma|inlined.0
-            end
-            local.get $12
-            local.get $18
-            i32.const 65536
-            i32.ge_u
-            i32.const 1
-            i32.add
-            i32.add
-            local.set $12
-            br $while-continue|2
-           end
-          end
-          i32.const 1
-         end
+         local.get $0
+         local.get $4
+         local.get $1
+         call $~lib/util/string/isFinalSigma
         else
          i32.const 0
         end
@@ -4466,20 +4283,20 @@
           i32.shr_u
           i32.const 55296
           i32.or
-          local.set $14
+          local.set $8
           local.get $7
           i32.const 1023
           i32.and
           i32.const 56320
           i32.or
-          local.set $13
+          local.set $9
           local.get $2
           local.get $3
           i32.const 1
           i32.shl
           i32.add
-          local.get $14
-          local.get $13
+          local.get $8
+          local.get $9
           i32.const 16
           i32.shl
           i32.or
@@ -4837,6 +4654,16 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32)
   local.get $0
   i64.const 1000000000000000
@@ -5019,14 +4846,20 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa64_lut
+ )
  (func $~lib/util/number/utoa64 (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i64)
   local.get $0
   i64.const 0
   i64.ne
@@ -5053,19 +4886,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $1
    local.get $1
-   local.set $6
    local.get $2
-   local.set $5
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
@@ -5077,19 +4900,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $1
    local.get $1
-   local.set $5
    local.get $0
-   local.set $7
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $5
-   local.get $7
-   local.get $4
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
   call $~lib/rt/pure/__retain
diff --git a/tests/compiler/std/string-encoding.optimized.wat b/tests/compiler/std/string-encoding.optimized.wat
index 0e16ace529..0ffe9fd9f3 100644
--- a/tests/compiler/std/string-encoding.optimized.wat
+++ b/tests/compiler/std/string-encoding.optimized.wat
@@ -2,11 +2,11 @@
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_i32 (func (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -86,16 +86,30 @@
   end
   local.get $0
  )
- (func $~lib/rt/pure/__release (param $0 i32)
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
   local.get $0
-  i32.const 22060
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
  )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -111,7 +125,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -133,7 +147,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -152,23 +166,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -176,61 +190,53 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -238,9 +244,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -249,7 +253,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -272,7 +276,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -286,7 +290,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -299,9 +303,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -310,7 +314,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -319,7 +323,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -337,9 +341,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -359,7 +363,7 @@
    if
     i32.const 0
     i32.const 1184
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -392,8 +396,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -414,27 +418,27 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1184
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -463,13 +467,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -477,21 +481,15 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -506,31 +504,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -560,7 +555,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -577,7 +572,7 @@
    if
     i32.const 0
     i32.const 1184
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -605,7 +600,7 @@
    if
     i32.const 0
     i32.const 1184
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -657,7 +652,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -678,7 +673,8 @@
     unreachable
    end
    i32.const 22064
-   local.tee $0
+   local.set $2
+   i32.const 22064
    i32.const 0
    i32.store
    i32.const 23632
@@ -697,27 +693,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 22064
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -737,7 +727,7 @@
    i32.const 22064
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -746,7 +736,7 @@
   if
    i32.const 1232
    i32.const 1184
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -765,6 +755,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -774,23 +765,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -819,7 +809,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -837,16 +827,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -867,26 +851,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1184
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -904,7 +884,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -949,13 +929,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -975,7 +956,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1066,7 +1047,7 @@
     if
      i32.const 0
      i32.const 1184
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1082,7 +1063,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1107,192 +1088,178 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
   local.get $0
   local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
+  i32.eq
+  if
+   return
+  end
   local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
-      if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
@@ -1302,15 +1269,24 @@
   i32.const 16
   i32.sub
   i32.load offset=12
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
   local.get $0
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   i32.const 1
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   call $~lib/rt/pure/__retain
  )
@@ -1475,31 +1451,33 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/string/String.UTF16.decodeUnsafe (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const -2
   i32.and
   local.tee $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   local.get $1
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $2
   call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String.UTF16.decode (param $0 i32) (result i32)
-  local.get $0
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  call $~lib/string/String.UTF16.decodeUnsafe
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -1593,10 +1571,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -1641,7 +1627,7 @@
   local.get $0
   local.get $1
   call $~lib/string/String.UTF16.decodeUnsafe
-  local.tee $3
+  local.tee $1
   i32.const 1040
   call $~lib/string/String.__eq
   i32.eqz
@@ -1656,7 +1642,7 @@
   local.get $0
   i32.const 4
   call $~lib/string/String.UTF16.decodeUnsafe
-  local.tee $4
+  local.tee $3
   i32.const 1312
   call $~lib/string/String.__eq
   i32.eqz
@@ -1673,7 +1659,7 @@
   i32.add
   i32.const 2
   call $~lib/string/String.UTF16.decodeUnsafe
-  local.tee $5
+  local.tee $4
   i32.const 1344
   call $~lib/string/String.__eq
   i32.eqz
@@ -1690,7 +1676,7 @@
   i32.add
   i32.const 4
   call $~lib/string/String.UTF16.decodeUnsafe
-  local.tee $6
+  local.tee $5
   i32.const 1376
   call $~lib/string/String.__eq
   i32.eqz
@@ -1707,7 +1693,7 @@
   i32.add
   i32.const 4
   call $~lib/string/String.UTF16.decodeUnsafe
-  local.tee $7
+  local.tee $6
   i32.const 1408
   call $~lib/string/String.__eq
   i32.eqz
@@ -1724,7 +1710,7 @@
   i32.add
   i32.const 0
   call $~lib/string/String.UTF16.decodeUnsafe
-  local.tee $1
+  local.tee $7
   i32.const 1296
   call $~lib/string/String.__eq
   i32.eqz
@@ -1737,21 +1723,77 @@
    unreachable
   end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $7
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/string/String.UTF8.byteLength (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -2023,12 +2065,21 @@
   local.get $0
   local.get $1
   call $~lib/string/String.UTF8.byteLength
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $2
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $2
   local.get $0
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.get $2
   local.get $1
   call $~lib/string/String.UTF8.encodeUnsafe
@@ -2177,7 +2228,14 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/string-encoding/testUTF8EncodeNullTerminated
   (local $0 i32)
@@ -2331,7 +2389,14 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
   local.get $1
@@ -2379,7 +2444,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -2402,10 +2469,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -2435,7 +2502,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 22060
   i32.ge_u
@@ -2464,16 +2531,19 @@
   if
    i32.const 0
    i32.const 1440
-   i32.const 738
+   i32.const 736
    i32.const 7
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const 1
   i32.shl
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $5
   local.set $1
   loop $while-continue|0
@@ -2666,7 +2736,7 @@
   if
    i32.const 0
    i32.const 1184
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -2680,15 +2750,6 @@
   i32.add
   call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String.UTF8.decode (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  local.get $1
-  call $~lib/string/String.UTF8.decodeUnsafe
- )
  (func $std/string-encoding/testUTF8DecodeNullTerminated
   (local $0 i32)
   (local $1 i32)
@@ -2700,9 +2761,13 @@
   i32.const 1
   call $~lib/string/String.UTF8.encode
   local.tee $1
+  local.get $1
+  i32.const 16
+  i32.sub
+  i32.load offset=12
   i32.const 1
-  call $~lib/string/String.UTF8.decode
-  local.tee $2
+  call $~lib/string/String.UTF8.decodeUnsafe
+  local.tee $3
   i32.const 1040
   call $~lib/string/String.__eq
   i32.eqz
@@ -2758,9 +2823,13 @@
    unreachable
   end
   local.get $0
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
   i32.const 1
-  call $~lib/string/String.UTF8.decode
-  local.tee $3
+  call $~lib/string/String.UTF8.decodeUnsafe
+  local.tee $4
   i32.const 1520
   call $~lib/string/String.__eq
   i32.eqz
@@ -2775,9 +2844,13 @@
   i32.const 1488
   i32.const 0
   call $~lib/string/String.UTF8.encode
-  local.tee $4
+  local.tee $2
+  local.get $2
+  i32.const 16
+  i32.sub
+  i32.load offset=12
   i32.const 1
-  call $~lib/string/String.UTF8.decode
+  call $~lib/string/String.UTF8.decodeUnsafe
   local.tee $5
   i32.const 1520
   call $~lib/string/String.__eq
@@ -2790,18 +2863,60 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  call $~lib/rt/pure/__release
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/string-encoding/testUTF8DecodeUnsafe
   (local $0 i32)
@@ -2821,13 +2936,12 @@
   i32.const 1040
   i32.const 0
   call $~lib/string/String.UTF8.byteLength
-  local.set $9
+  local.set $1
   local.get $0
-  local.tee $1
   i32.const 0
   i32.const 0
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $8
+  local.tee $2
   i32.const 1296
   call $~lib/string/String.__eq
   i32.eqz
@@ -2839,11 +2953,11 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $0
   local.get $1
-  local.get $9
   i32.const 0
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $7
+  local.tee $1
   i32.const 1040
   call $~lib/string/String.__eq
   i32.eqz
@@ -2855,11 +2969,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 4
   i32.const 0
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $6
+  local.tee $3
   i32.const 1312
   call $~lib/string/String.__eq
   i32.eqz
@@ -2871,13 +2985,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 4
   i32.add
   i32.const 2
   i32.const 0
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $5
+  local.tee $4
   i32.const 1376
   call $~lib/string/String.__eq
   i32.eqz
@@ -2889,13 +3003,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 6
   i32.add
   i32.const 4
   i32.const 0
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $4
+  local.tee $5
   i32.const 1408
   call $~lib/string/String.__eq
   i32.eqz
@@ -2907,13 +3021,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 10
   i32.add
   i32.const 0
   i32.const 0
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $3
+  local.tee $6
   i32.const 1296
   call $~lib/string/String.__eq
   i32.eqz
@@ -2925,13 +3039,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 4
   i32.add
   i32.const 100
   i32.const 1
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $2
+  local.tee $7
   i32.const 1552
   call $~lib/string/String.__eq
   i32.eqz
@@ -2943,13 +3057,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 6
   i32.add
   i32.const 100
   i32.const 1
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $9
+  local.tee $8
   i32.const 1408
   call $~lib/string/String.__eq
   i32.eqz
@@ -2961,13 +3075,13 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
+  local.get $0
   i32.const 10
   i32.add
   i32.const 100
   i32.const 1
   call $~lib/string/String.UTF8.decodeUnsafe
-  local.tee $1
+  local.tee $9
   i32.const 1296
   call $~lib/string/String.__eq
   i32.eqz
@@ -2979,26 +3093,96 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
   local.get $2
-  call $~lib/rt/pure/__release
-  local.get $9
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $5
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $7
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $8
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $8
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $9
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $9
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/string-encoding/testLarge (param $0 i32)
   (local $1 i32)
@@ -3009,9 +3193,13 @@
   i32.const 0
   call $~lib/string/String.UTF8.encode
   local.tee $1
+  local.get $1
+  i32.const 16
+  i32.sub
+  i32.load offset=12
   i32.const 0
-  call $~lib/string/String.UTF8.decode
-  local.tee $2
+  call $~lib/string/String.UTF8.decodeUnsafe
+  local.tee $3
   local.get $0
   call $~lib/string/String.__eq
   i32.eqz
@@ -3025,8 +3213,12 @@
   end
   local.get $0
   call $~lib/string/String.UTF16.encode
-  local.tee $3
-  call $~lib/string/String.UTF16.decode
+  local.tee $2
+  local.get $2
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  call $~lib/string/String.UTF16.decodeUnsafe
   local.tee $4
   local.get $0
   call $~lib/string/String.__eq
@@ -3039,14 +3231,42 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
-  call $~lib/rt/pure/__release
+  local.get $3
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $start:std/string-encoding
   (local $0 i32)
@@ -3067,7 +3287,11 @@
   i32.const 1040
   call $~lib/string/String.UTF16.encode
   local.tee $0
-  call $~lib/string/String.UTF16.decode
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  call $~lib/string/String.UTF16.decodeUnsafe
   local.tee $1
   i32.const 1040
   call $~lib/string/String.__eq
@@ -3081,9 +3305,23 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   call $std/string-encoding/testUTF16DecodeUnsafe
   i32.const 1040
   i32.const 0
@@ -3117,8 +3355,12 @@
   i32.const 0
   call $~lib/string/String.UTF8.encode
   local.tee $0
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
   i32.const 0
-  call $~lib/string/String.UTF8.decode
+  call $~lib/string/String.UTF8.decodeUnsafe
   local.tee $1
   i32.const 1040
   call $~lib/string/String.__eq
@@ -3132,9 +3374,23 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 22060
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   call $std/string-encoding/testUTF8DecodeNullTerminated
   call $std/string-encoding/testUTF8DecodeUnsafe
   i32.const 1584
diff --git a/tests/compiler/std/string-encoding.untouched.wat b/tests/compiler/std/string-encoding.untouched.wat
index 49ea1dfcdb..cdf0e3de1e 100644
--- a/tests/compiler/std/string-encoding.untouched.wat
+++ b/tests/compiler/std/string-encoding.untouched.wat
@@ -1,8 +1,8 @@
 (module
  (type $none_=>_none (func))
- (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
@@ -148,6 +148,69 @@
    unreachable
   end
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -156,9 +219,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -171,7 +231,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -198,7 +258,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -252,7 +312,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -277,77 +337,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -364,6 +382,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -375,8 +399,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -384,7 +406,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -401,28 +423,18 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -433,44 +445,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -478,30 +480,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 176
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -520,22 +518,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -561,7 +559,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -573,18 +571,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 176
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -638,27 +636,15 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -673,24 +659,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -700,31 +672,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -732,8 +688,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -759,24 +713,22 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -784,7 +736,7 @@
    if
     i32.const 0
     i32.const 176
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -792,16 +744,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -817,7 +769,7 @@
    if
     i32.const 0
     i32.const 176
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -826,8 +778,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -838,49 +790,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -893,10 +841,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -946,73 +890,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1025,11 +942,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1049,7 +966,7 @@
   if
    i32.const 224
    i32.const 176
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1075,9 +992,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1145,31 +1059,24 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1182,79 +1089,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 176
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1291,9 +1167,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1307,12 +1181,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1322,7 +1196,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1359,7 +1233,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1410,29 +1284,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1452,7 +1306,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1499,7 +1353,7 @@
      if
       i32.const 0
       i32.const 176
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1520,7 +1374,7 @@
     if
      i32.const 0
      i32.const 176
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1541,7 +1395,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -2608,238 +2462,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   i32.const 0
-   i32.const 1
-   i32.lt_s
-   drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
-   if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+  (local $4 i32)
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/string/String.UTF16.encodeUnsafe (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $1
@@ -4214,7 +4063,7 @@
   if
    i32.const 0
    i32.const 176
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4271,22 +4120,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -4297,25 +4136,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
@@ -4395,7 +4234,7 @@
   if
    i32.const 0
    i32.const 432
-   i32.const 738
+   i32.const 736
    i32.const 7
    call $~lib/builtins/abort
    unreachable
diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat
index 0644843b30..52d81ef418 100644
--- a/tests/compiler/std/string.optimized.wat
+++ b/tests/compiler/std/string.optimized.wat
@@ -5,17 +5,21 @@
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_=>_f64 (func (param i32) (result f64)))
+ (type $i64_i32_=>_f64 (func (param i64 i32) (result f64)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
- (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
- (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
+ (type $i32_i64_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i64 i32 i64 i32) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
  (type $none_=>_i64 (func (result i64)))
+ (type $i64_i32_=>_i64 (func (param i64 i32) (result i64)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $f64_i32_=>_f64 (func (param f64 i32) (result f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -436,25 +440,6 @@
   end
   local.get $0
  )
- (func $~lib/rt/pure/__release (param $0 i32)
-  local.get $0
-  i32.const 17912
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   local.get $0
@@ -552,10 +537,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -572,12 +565,41 @@
   local.get $0
   if (result i32)
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.eqz
   else
    i32.const 1
   end
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -592,7 +614,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -614,7 +636,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -633,23 +655,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -657,61 +679,53 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -719,9 +733,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -730,7 +742,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -753,7 +765,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -767,7 +779,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -780,9 +792,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -791,7 +803,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -800,7 +812,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -818,9 +830,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -840,7 +852,7 @@
    if
     i32.const 0
     i32.const 1360
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -873,8 +885,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -895,27 +907,27 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1360
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -944,13 +956,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -958,21 +970,15 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -987,31 +993,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -1041,7 +1044,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -1058,7 +1061,7 @@
    if
     i32.const 0
     i32.const 1360
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -1086,7 +1089,7 @@
    if
     i32.const 0
     i32.const 1360
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -1138,7 +1141,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -1159,7 +1162,8 @@
     unreachable
    end
    i32.const 17920
-   local.tee $0
+   local.set $2
+   i32.const 17920
    i32.const 0
    i32.store
    i32.const 19488
@@ -1178,27 +1182,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 17920
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -1218,7 +1216,7 @@
    i32.const 17920
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -1227,7 +1225,7 @@
   if
    i32.const 1408
    i32.const 1360
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1246,6 +1244,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1255,23 +1254,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -1300,7 +1298,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1318,16 +1316,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -1348,26 +1340,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1360
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -1385,7 +1373,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1430,13 +1418,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -1456,7 +1445,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1547,7 +1536,7 @@
     if
      i32.const 0
      i32.const 1360
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1563,7 +1552,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1588,25 +1577,20 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.fromCharCode (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
   call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/string/String.fromCharCode (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  i32.const 2
+  i32.const 2
   local.get $1
   i32.const 0
   i32.gt_s
   local.tee $3
   i32.shl
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.store16
@@ -1656,6 +1640,7 @@
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 2
   local.get $0
   i32.const 65535
@@ -1663,7 +1648,9 @@
   local.tee $2
   i32.shl
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $1
   local.get $2
   if
@@ -1697,7 +1684,11 @@
   (local $3 i32)
   (local $4 i32)
   local.get $1
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.eqz
   if
@@ -1705,7 +1696,11 @@
    return
   end
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $3
   i32.eqz
   if
@@ -1753,177 +1748,179 @@
   end
   i32.const -1
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/memory/memory.repeat (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
@@ -1942,7 +1939,7 @@
     i32.add
     local.get $1
     local.get $2
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $2
     local.get $4
     i32.add
@@ -1956,13 +1953,12 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  local.get $0
-  call $~lib/string/String#get:length
-  i32.const 1
-  i32.shl
-  local.set $5
   local.get $2
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   i32.const 1
   i32.shl
   local.set $3
@@ -1970,7 +1966,15 @@
   i32.const 1
   i32.shl
   local.tee $4
-  local.get $5
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $5
   i32.lt_u
   if (result i32)
    i32.const 1
@@ -1983,9 +1987,12 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $4
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $1
   local.get $4
   local.get $5
@@ -2014,19 +2021,19 @@
    local.get $4
    local.get $3
    i32.sub
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   else
    local.get $1
    local.get $2
    local.get $4
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   end
   local.get $1
   local.get $4
   i32.add
   local.get $0
   local.get $5
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   call $~lib/rt/pure/__retain
  )
@@ -2034,26 +2041,33 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  call $~lib/string/String#get:length
-  i32.const 1
-  i32.shl
-  local.set $3
   local.get $2
-  call $~lib/string/String#get:length
-  i32.const 1
-  i32.shl
-  local.set $4
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.set $3
   local.get $1
   i32.const 1
   i32.shl
-  local.tee $5
-  local.get $3
+  local.tee $4
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $1
   i32.lt_u
   if (result i32)
    i32.const 1
   else
-   local.get $4
+   local.get $3
    i32.eqz
   end
   if
@@ -2061,70 +2075,88 @@
    call $~lib/rt/pure/__retain
    return
   end
-  local.get $5
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $5
   local.get $0
-  local.get $3
-  call $~lib/memory/memory.copy
-  local.get $5
-  local.get $3
+  local.get $1
+  call $~lib/util/memory/memmove
+  local.get $4
+  local.get $1
   i32.sub
   local.tee $0
-  local.get $4
+  local.get $3
   i32.gt_u
   if
    local.get $1
-   local.get $3
+   local.get $5
    i32.add
-   local.tee $3
+   local.tee $1
    local.get $2
-   local.get $4
+   local.get $3
    local.get $0
    i32.const 2
    i32.sub
-   local.get $4
+   local.get $3
    i32.div_u
-   local.tee $5
+   local.tee $4
    call $~lib/memory/memory.repeat
+   local.get $1
+   local.get $3
    local.get $4
-   local.get $5
    i32.mul
-   local.tee $4
-   local.get $3
+   local.tee $1
    i32.add
    local.get $2
    local.get $0
-   local.get $4
+   local.get $1
    i32.sub
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   else
    local.get $1
-   local.get $3
+   local.get $5
    i32.add
    local.get $2
    local.get $0
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
   end
-  local.get $1
+  local.get $5
   call $~lib/rt/pure/__retain
  )
  (func $~lib/string/String#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
+  (local $5 i32)
   local.get $1
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.eqz
   if
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    return
   end
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $3
+  local.set $5
+  local.get $3
   i32.eqz
   if
    i32.const -1
@@ -2137,7 +2169,7 @@
   i32.gt_s
   select
   local.tee $2
-  local.get $3
+  local.get $5
   local.get $4
   i32.sub
   local.tee $3
@@ -2180,12 +2212,20 @@
    i32.const 0
    return
   end
-  local.get $0
-  call $~lib/string/String#get:length
-  local.tee $3
   local.get $1
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $2
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $3
   i32.ne
   if
    i32.const 1
@@ -2277,7 +2317,11 @@
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   i32.const 1
   i32.shl
   local.set $2
@@ -2318,15 +2362,18 @@
    i32.const 1280
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $2
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $0
   local.get $1
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   call $~lib/rt/pure/__retain
  )
@@ -2334,7 +2381,11 @@
   (local $1 i32)
   (local $2 i32)
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   i32.const 1
   i32.shl
   local.tee $2
@@ -2374,13 +2425,16 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   local.get $1
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $2
   call $~lib/rt/pure/__retain
  )
@@ -2389,8 +2443,14 @@
   (local $2 i32)
   (local $3 i32)
   local.get $0
-  call $~lib/string/String#get:length
-  local.tee $3
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  local.tee $1
+  local.set $3
+  local.get $1
   i32.const 1
   i32.shl
   local.set $1
@@ -2459,15 +2519,18 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $0
   local.get $2
   i32.add
   local.get $1
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   call $~lib/rt/pure/__retain
  )
@@ -2479,7 +2542,11 @@
   (local $5 f64)
   block $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $1
    i32.eqz
    br_if $folding-inner0
@@ -2508,7 +2575,7 @@
    local.get $2
    i32.const 45
    i32.eq
-   if
+   if (result i32)
     local.get $1
     i32.const 1
     i32.sub
@@ -2522,12 +2589,11 @@
     i32.add
     local.tee $0
     i32.load16_u
-    local.set $2
    else
     local.get $2
     i32.const 43
     i32.eq
-    if
+    if (result i32)
      local.get $1
      i32.const 1
      i32.sub
@@ -2539,9 +2605,11 @@
      i32.add
      local.tee $0
      i32.load16_u
-     local.set $2
+    else
+     local.get $2
     end
    end
+   local.set $2
    local.get $1
    i32.const 2
    i32.gt_s
@@ -2691,8 +2759,10 @@
   i32.const 2912
   local.set $5
   block $folding-inner0
-   i32.const 2912
-   call $~lib/string/String#get:length
+   i32.const 2908
+   i32.load
+   i32.const 1
+   i32.shr_u
    local.tee $0
    i32.eqz
    br_if $folding-inner0
@@ -2721,7 +2791,7 @@
    local.get $1
    i32.const 45
    i32.eq
-   if
+   if (result i32)
     local.get $0
     i32.const 1
     i32.sub
@@ -2735,12 +2805,11 @@
     i32.add
     local.tee $5
     i32.load16_u
-    local.set $1
    else
     local.get $1
     i32.const 43
     i32.eq
-    if
+    if (result i32)
      local.get $0
      i32.const 1
      i32.sub
@@ -2752,9 +2821,11 @@
      i32.add
      local.tee $5
      i32.load16_u
-     local.set $1
+    else
+     local.get $1
     end
    end
+   local.set $1
    local.get $0
    i32.const 2
    i32.gt_s
@@ -2902,8 +2973,10 @@
   i32.const 2960
   local.set $5
   block $folding-inner0
-   i32.const 2960
-   call $~lib/string/String#get:length
+   i32.const 2956
+   i32.load
+   i32.const 1
+   i32.shr_u
    local.tee $0
    i32.eqz
    br_if $folding-inner0
@@ -2932,7 +3005,7 @@
    local.get $1
    i32.const 45
    i32.eq
-   if
+   if (result i32)
     local.get $0
     i32.const 1
     i32.sub
@@ -2946,12 +3019,11 @@
     i32.add
     local.tee $5
     i32.load16_u
-    local.set $1
    else
     local.get $1
     i32.const 43
     i32.eq
-    if
+    if (result i32)
      local.get $0
      i32.const 1
      i32.sub
@@ -2963,9 +3035,11 @@
      i32.add
      local.tee $5
      i32.load16_u
-     local.set $1
+    else
+     local.get $1
     end
    end
+   local.set $1
    local.get $0
    i32.const 2
    i32.gt_s
@@ -3105,69 +3179,203 @@
   end
   i64.const 0
  )
- (func $~lib/math/ipow32 (param $0 i32) (result i32)
-  (local $1 i32)
+ (func $~lib/util/string/parseExp (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  i32.const 5
-  local.set $1
+  (local $3 i32)
+  (local $4 i32)
   i32.const 1
-  local.set $2
-  loop $while-continue|0
-   local.get $0
+  local.set $3
+  local.get $0
+  i32.load16_u
+  i32.const 32
+  i32.or
+  i32.const 101
+  i32.ne
+  if
    i32.const 0
-   i32.gt_s
-   if
-    local.get $1
-    local.get $2
-    i32.mul
-    local.get $2
-    local.get $0
-    i32.const 1
-    i32.and
-    select
-    local.set $2
-    local.get $0
-    i32.const 1
-    i32.shr_s
-    local.set $0
-    local.get $1
-    local.get $1
-    i32.mul
-    local.set $1
-    br $while-continue|0
-   end
+   return
   end
-  local.get $2
- )
- (func $~lib/math/NativeMath.scalbn (param $0 f64) (param $1 i32) (result f64)
-  local.get $1
-  i32.const 1023
-  i32.gt_s
-  if (result f64)
-   local.get $0
-   f64.const 8988465674311579538646525e283
-   f64.mul
-   local.set $0
+  local.get $0
+  i32.const 2
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.tee $2
+  i32.const 45
+  i32.eq
+  if (result i32)
    local.get $1
-   i32.const 1023
+   i32.const 1
    i32.sub
    local.tee $1
-   i32.const 1023
-   i32.gt_s
-   if (result f64)
+   i32.eqz
+   if
+    i32.const 0
+    return
+   end
+   i32.const -1
+   local.set $3
+   local.get $0
+   i32.const 2
+   i32.add
+   local.tee $0
+   i32.load16_u
+  else
+   local.get $2
+   i32.const 43
+   i32.eq
+   if (result i32)
     local.get $1
-    i32.const 1023
+    i32.const 1
     i32.sub
     local.tee $1
-    i32.const 1023
-    local.get $1
-    i32.const 1023
-    i32.lt_s
-    select
-    local.set $1
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
     local.get $0
-    f64.const 8988465674311579538646525e283
-    f64.mul
+    i32.const 2
+    i32.add
+    local.tee $0
+    i32.load16_u
+   else
+    local.get $2
+   end
+  end
+  local.set $2
+  loop $while-continue|0
+   local.get $2
+   i32.const 48
+   i32.eq
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.tee $1
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $0
+    i32.const 2
+    i32.add
+    local.tee $0
+    i32.load16_u
+    local.set $2
+    br $while-continue|0
+   end
+  end
+  local.get $2
+  i32.const 48
+  i32.sub
+  local.set $2
+  loop $for-loop|1
+   local.get $2
+   i32.const 10
+   i32.lt_u
+   i32.const 0
+   local.get $1
+   select
+   if
+    local.get $4
+    i32.const 3200
+    i32.ge_s
+    if
+     local.get $3
+     i32.const 3200
+     i32.mul
+     return
+    end
+    local.get $2
+    local.get $4
+    i32.const 10
+    i32.mul
+    i32.add
+    local.set $4
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 2
+    i32.add
+    local.tee $0
+    i32.load16_u
+    i32.const 48
+    i32.sub
+    local.set $2
+    br $for-loop|1
+   end
+  end
+  local.get $3
+  local.get $4
+  i32.mul
+ )
+ (func $~lib/math/ipow32 (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  local.set $1
+  i32.const 1
+  local.set $2
+  loop $while-continue|0
+   local.get $0
+   i32.const 0
+   i32.gt_s
+   if
+    local.get $1
+    local.get $2
+    i32.mul
+    local.get $2
+    local.get $0
+    i32.const 1
+    i32.and
+    select
+    local.set $2
+    local.get $0
+    i32.const 1
+    i32.shr_s
+    local.set $0
+    local.get $1
+    local.get $1
+    i32.mul
+    local.set $1
+    br $while-continue|0
+   end
+  end
+  local.get $2
+ )
+ (func $~lib/math/NativeMath.scalbn (param $0 f64) (param $1 i32) (result f64)
+  local.get $1
+  i32.const 1023
+  i32.gt_s
+  if (result f64)
+   local.get $0
+   f64.const 8988465674311579538646525e283
+   f64.mul
+   local.set $0
+   local.get $1
+   i32.const 1023
+   i32.sub
+   local.tee $1
+   i32.const 1023
+   i32.gt_s
+   if (result f64)
+    local.get $1
+    i32.const 1023
+    i32.sub
+    local.tee $1
+    i32.const 1023
+    local.get $1
+    i32.const 1023
+    i32.lt_s
+    select
+    local.set $1
+    local.get $0
+    f64.const 8988465674311579538646525e283
+    f64.mul
    else
     local.get $0
    end
@@ -3216,203 +3424,482 @@
   f64.reinterpret_i64
   f64.mul
  )
- (func $~lib/util/string/strtod (param $0 i32) (result f64)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i64)
-  (local $11 f64)
-  (local $12 i64)
-  (local $13 f64)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 i64)
-  block $folding-inner0
-   local.get $0
-   call $~lib/string/String#get:length
-   local.tee $5
-   i32.eqz
-   br_if $folding-inner0
-   local.get $0
-   i32.load16_u
-   local.set $7
-   f64.const 1
-   local.set $13
-   loop $while-continue|0
-    local.get $5
-    if (result i32)
-     local.get $7
-     call $~lib/util/string/isSpace
-    else
-     i32.const 0
-    end
-    if
-     local.get $0
-     i32.const 2
-     i32.add
-     local.tee $0
-     i32.load16_u
-     local.set $7
-     local.get $5
-     i32.const 1
-     i32.sub
-     local.set $5
-     br $while-continue|0
-    end
-   end
-   local.get $5
-   i32.eqz
-   br_if $folding-inner0
-   local.get $7
-   i32.const 45
-   i32.eq
-   if (result i32)
-    local.get $5
-    i32.const 1
-    i32.sub
-    local.tee $5
-    i32.eqz
-    br_if $folding-inner0
-    f64.const -1
-    local.set $13
+ (func $~lib/util/string/scaledown (param $0 i64) (param $1 i32) (result f64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  local.get $0
+  local.get $0
+  i64.clz
+  local.tee $3
+  i64.shl
+  local.set $0
+  local.get $1
+  i64.extend_i32_s
+  local.get $3
+  i64.sub
+  local.set $3
+  loop $for-loop|0
+   local.get $1
+   i32.const -14
+   i32.le_s
+   if
+    f64.const 0.00004294967296
     local.get $0
-    i32.const 2
+    i64.const 6103515625
+    i64.rem_u
+    local.get $0
+    i64.const 6103515625
+    i64.div_u
+    local.tee $4
+    i64.clz
+    local.tee $2
+    i64.const 18
+    i64.sub
+    i64.shl
+    f64.convert_i64_u
+    f64.mul
+    f64.nearest
+    i64.trunc_f64_u
+    local.get $4
+    local.get $2
+    i64.shl
+    i64.add
+    local.set $0
+    local.get $3
+    local.get $2
+    i64.sub
+    local.set $3
+    local.get $1
+    i32.const 14
     i32.add
-    local.tee $0
-    i32.load16_u
-   else
-    local.get $7
-    i32.const 43
-    i32.eq
-    if (result i32)
-     local.get $5
-     i32.const 1
-     i32.sub
-     local.tee $5
-     i32.eqz
-     br_if $folding-inner0
-     local.get $0
-     i32.const 2
-     i32.add
-     local.tee $0
-     i32.load16_u
-    else
-     local.get $7
-    end
+    local.set $1
+    br $for-loop|0
    end
-   local.tee $7
-   i32.const 73
-   i32.eq
+  end
+  local.get $0
+  i32.const 0
+  local.get $1
+  i32.sub
+  call $~lib/math/ipow32
+  i64.extend_i32_s
+  local.tee $4
+  i64.div_u
+  local.tee $5
+  i64.clz
+  local.set $2
+  local.get $0
+  local.get $4
+  i64.rem_u
+  f64.convert_i64_u
+  i64.reinterpret_f64
+  local.get $2
+  i64.const 52
+  i64.shl
+  i64.add
+  f64.reinterpret_i64
+  local.get $4
+  f64.convert_i64_u
+  f64.div
+  i64.trunc_f64_u
+  local.get $5
+  local.get $2
+  i64.shl
+  i64.add
+  f64.convert_i64_u
+  local.get $3
+  local.get $2
+  i64.sub
+  i32.wrap_i64
+  call $~lib/math/NativeMath.scalbn
+ )
+ (func $~lib/util/string/fixmul (param $0 i64) (param $1 i32) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  i64.const 32
+  local.get $1
+  i64.extend_i32_u
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.mul
+  local.get $1
+  i64.extend_i32_u
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.mul
+  local.tee $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.tee $2
+  i64.const 32
+  i64.shr_u
+  i32.wrap_i64
+  i32.clz
+  local.tee $1
+  i64.extend_i32_u
+  i64.sub
+  local.tee $3
+  global.get $~lib/util/string/__fixmulShift
+  i64.add
+  global.set $~lib/util/string/__fixmulShift
+  local.get $0
+  local.get $1
+  i64.extend_i32_u
+  i64.shl
+  i64.const 31
+  i64.shr_u
+  i64.const 1
+  i64.and
+  local.get $2
+  local.get $1
+  i64.extend_i32_u
+  i64.shl
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.get $3
+  i64.shr_u
+  i64.or
+  i64.add
+ )
+ (func $~lib/util/string/scientific (param $0 i64) (param $1 i32) (result f64)
+  (local $2 f64)
+  (local $3 i32)
+  (local $4 i64)
+  i32.const 1
+  local.get $1
+  i32.const -342
+  i32.lt_s
+  local.get $0
+  i64.eqz
+  select
+  if
+   f64.const 0
+   return
+  end
+  local.get $1
+  i32.const 308
+  i32.gt_s
+  if
+   f64.const inf
+   return
+  end
+  local.get $0
+  f64.convert_i64_u
+  local.set $2
+  local.get $1
+  i32.eqz
+  if
+   local.get $2
+   return
+  end
+  local.get $1
+  i32.const 37
+  i32.le_s
+  i32.const 0
+  local.get $1
+  i32.const 22
+  i32.gt_s
+  select
+  if
+   local.get $2
+   local.get $1
+   i32.const 3
+   i32.shl
+   i32.const 2824
+   i32.add
+   f64.load
+   f64.mul
+   local.set $2
+   i32.const 22
+   local.set $1
+  end
+  local.get $0
+  i64.const 9007199254740991
+  i64.le_u
+  if (result i32)
+   local.get $1
+   i32.const 31
+   i32.shr_s
+   local.tee $3
+   local.get $1
+   local.get $3
+   i32.add
+   i32.xor
+   i32.const 22
+   i32.le_s
+  else
    i32.const 0
-   local.get $5
-   i32.const 8
-   i32.ge_s
-   select
+  end
+  if (result f64)
+   local.get $1
+   i32.const 0
+   i32.gt_s
    if
+    local.get $2
+    local.get $1
+    i32.const 3
+    i32.shl
+    i32.const 3000
+    i32.add
+    f64.load
+    f64.mul
+    return
+   end
+   local.get $2
+   i32.const 0
+   local.get $1
+   i32.sub
+   i32.const 3
+   i32.shl
+   i32.const 3000
+   i32.add
+   f64.load
+   f64.div
+  else
+   local.get $1
+   i32.const 0
+   i32.lt_s
+   if (result f64)
     local.get $0
-    i64.load
-    i64.const 29555310648492105
-    i64.eq
-    if (result i32)
-     local.get $0
-     i64.load offset=8
-     i64.const 34058970405077102
-     i64.eq
-    else
-     i32.const 0
-    end
-    if
-     f64.const inf
-     local.get $13
-     f64.copysign
-     return
+    local.get $1
+    call $~lib/util/string/scaledown
+   else
+    local.get $0
+    local.get $0
+    i64.ctz
+    local.tee $4
+    i64.shr_u
+    local.set $0
+    local.get $4
+    local.get $1
+    i64.extend_i32_s
+    i64.add
+    global.set $~lib/util/string/__fixmulShift
+    loop $for-loop|0
+     local.get $1
+     i32.const 13
+     i32.ge_s
+     if
+      local.get $0
+      i32.const 1220703125
+      call $~lib/util/string/fixmul
+      local.set $0
+      local.get $1
+      i32.const 13
+      i32.sub
+      local.set $1
+      br $for-loop|0
+     end
     end
-    br $folding-inner0
+    local.get $0
+    local.get $1
+    call $~lib/math/ipow32
+    call $~lib/util/string/fixmul
+    f64.convert_i64_u
+    global.get $~lib/util/string/__fixmulShift
+    i32.wrap_i64
+    call $~lib/math/NativeMath.scalbn
    end
-   local.get $7
-   i32.const 48
+  end
+ )
+ (func $~lib/util/string/strtod (param $0 i32) (result f64)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f64)
+  (local $7 i32)
+  (local $8 i64)
+  block $folding-inner0
+   local.get $0
+   i32.const 16
    i32.sub
-   i32.const 10
-   i32.ge_u
-   i32.const 0
-   local.get $7
-   i32.const 46
-   i32.ne
-   select
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.tee $4
+   i32.eqz
    br_if $folding-inner0
    local.get $0
-   local.set $4
-   loop $while-continue|1
-    local.get $7
-    i32.const 48
-    i32.eq
+   i32.load16_u
+   local.set $5
+   f64.const 1
+   local.set $6
+   loop $while-continue|0
+    local.get $4
+    if (result i32)
+     local.get $5
+     call $~lib/util/string/isSpace
+    else
+     i32.const 0
+    end
     if
      local.get $0
      i32.const 2
      i32.add
      local.tee $0
      i32.load16_u
-     local.set $7
-     local.get $5
+     local.set $5
+     local.get $4
      i32.const 1
      i32.sub
-     local.set $5
-     br $while-continue|1
+     local.set $4
+     br $while-continue|0
     end
    end
+   local.get $4
+   i32.eqz
+   br_if $folding-inner0
    local.get $5
-   i32.const 0
-   i32.le_s
-   if
+   i32.const 45
+   i32.eq
+   if
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.tee $4
+    i32.eqz
+    br_if $folding-inner0
+    f64.const -1
+    local.set $6
+    local.get $0
+    i32.const 2
+    i32.add
+    local.tee $0
+    i32.load16_u
+    local.set $5
+   else
+    local.get $5
+    i32.const 43
+    i32.eq
+    if
+     local.get $4
+     i32.const 1
+     i32.sub
+     local.tee $4
+     i32.eqz
+     br_if $folding-inner0
+     local.get $0
+     i32.const 2
+     i32.add
+     local.tee $0
+     i32.load16_u
+     local.set $5
+    end
+   end
+   local.get $5
+   i32.const 73
+   i32.eq
+   i32.const 0
+   local.get $4
+   i32.const 8
+   i32.ge_s
+   select
+   if
+    local.get $0
+    i64.load
+    i64.const 29555310648492105
+    i64.eq
+    if (result i32)
+     local.get $0
+     i64.load offset=8
+     i64.const 34058970405077102
+     i64.eq
+    else
+     i32.const 0
+    end
+    if
+     f64.const inf
+     local.get $6
+     f64.copysign
+     return
+    end
+    br $folding-inner0
+   end
+   local.get $5
+   i32.const 48
+   i32.sub
+   i32.const 10
+   i32.ge_u
+   i32.const 0
+   local.get $5
+   i32.const 46
+   i32.ne
+   select
+   br_if $folding-inner0
+   local.get $0
+   local.set $1
+   loop $while-continue|1
+    local.get $5
+    i32.const 48
+    i32.eq
+    if
+     local.get $0
+     i32.const 2
+     i32.add
+     local.tee $0
+     i32.load16_u
+     local.set $5
+     local.get $4
+     i32.const 1
+     i32.sub
+     local.set $4
+     br $while-continue|1
+    end
+   end
+   local.get $4
+   i32.const 0
+   i32.le_s
+   if
     f64.const 0
     return
    end
-   local.get $7
+   local.get $5
    i32.const 46
    i32.eq
    if
-    local.get $4
+    local.get $1
     local.get $0
     i32.sub
     i32.eqz
-    local.set $4
+    local.set $1
     local.get $0
     i32.const 2
     i32.add
     local.set $0
-    local.get $5
+    local.get $4
     i32.const 1
     i32.sub
-    local.tee $5
+    local.tee $4
     if (result i32)
      i32.const 0
     else
-     local.get $4
+     local.get $1
     end
     br_if $folding-inner0
     i32.const 1
-    local.set $14
+    local.set $7
     loop $for-loop|2
      local.get $0
      i32.load16_u
-     local.tee $7
+     local.tee $5
      i32.const 48
      i32.eq
      if
-      local.get $5
+      local.get $4
       i32.const 1
       i32.sub
-      local.set $5
-      local.get $2
+      local.set $4
+      local.get $3
       i32.const 1
       i32.sub
-      local.set $2
+      local.set $3
       local.get $0
       i32.const 2
       i32.add
@@ -3420,80 +3907,80 @@
       br $for-loop|2
      end
     end
-    local.get $5
+    local.get $4
     i32.const 0
     i32.le_s
     if
      f64.const 0
      return
     end
-    local.get $7
+    local.get $5
     i32.const 48
     i32.sub
     i32.const 10
     i32.ge_u
     i32.const 0
     i32.const 0
-    local.get $4
-    local.get $2
+    local.get $1
+    local.get $3
     select
     select
     br_if $folding-inner0
    end
-   local.get $7
+   local.get $5
    i32.const 48
    i32.sub
-   local.set $8
+   local.set $1
    loop $for-loop|3
     i32.const 1
-    local.get $14
+    local.get $7
     i32.eqz
     i32.const 0
-    local.get $7
+    local.get $5
     i32.const 46
     i32.eq
     select
-    local.get $8
+    local.get $1
     i32.const 10
     i32.lt_u
     select
     if
      block $for-break3
-      local.get $8
+      local.get $1
       i32.const 10
       i32.lt_u
       if
-       local.get $8
+       local.get $1
        i64.extend_i32_u
-       local.get $6
+       local.get $8
        i64.const 10
        i64.mul
        i64.add
-       local.get $6
        local.get $8
+       local.get $1
        i32.eqz
        i32.eqz
        i64.extend_i32_u
        i64.or
-       local.get $1
+       local.get $2
        i32.const 19
        i32.lt_s
        select
-       local.set $6
-       local.get $1
+       local.set $8
+       local.get $2
        i32.const 1
        i32.add
-       local.set $1
-      else
-       local.get $1
        local.set $2
+      else
+       local.get $2
+       local.set $3
        i32.const 1
-       local.set $14
+       local.set $7
       end
-      local.get $5
+      local.get $4
       i32.const 1
       i32.sub
-      local.tee $5
+      local.tee $4
       i32.eqz
       br_if $for-break3
       local.get $0
@@ -3501,534 +3988,130 @@
       i32.add
       local.tee $0
       i32.load16_u
-      local.tee $7
+      local.tee $5
       i32.const 48
       i32.sub
-      local.set $8
+      local.set $1
       br $for-loop|3
      end
     end
    end
+   local.get $8
+   local.get $0
+   local.get $4
+   call $~lib/util/string/parseExp
+   local.get $3
    local.get $2
-   local.get $1
-   local.get $14
+   local.get $7
    select
    i32.const 19
-   local.get $1
+   local.get $2
    i32.const 19
-   local.get $1
+   local.get $2
    i32.lt_s
    select
    i32.sub
-   local.set $4
-   i32.const 1
-   local.set $1
-   block $~lib/util/string/parseExp|inlined.0
-    local.get $0
-    local.tee $2
-    i32.load16_u
-    i32.const 32
-    i32.or
-    i32.const 101
-    i32.ne
-    br_if $~lib/util/string/parseExp|inlined.0
-    local.get $2
-    i32.const 2
-    i32.add
-    local.tee $8
-    i32.load16_u
-    local.tee $0
-    i32.const 45
-    i32.eq
-    if (result i32)
-     local.get $5
-     i32.const 1
+   i32.add
+   call $~lib/util/string/scientific
+   local.get $6
+   f64.copysign
+   return
+  end
+  f64.const nan:0x8000000000000
+ )
+ (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.tee $1
+  i32.eqz
+  if
+   local.get $1
+   i32.const 1648
+   i32.ne
+   if
+    local.get $1
+    i32.const 17912
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
      i32.sub
-     local.tee $5
-     i32.eqz
-     br_if $~lib/util/string/parseExp|inlined.0
-     i32.const -1
-     local.set $1
-     local.get $8
-     i32.const 2
-     i32.add
-     local.tee $8
-     i32.load16_u
-    else
-     local.get $0
-     i32.const 43
-     i32.eq
-     if (result i32)
-      local.get $5
-      i32.const 1
-      i32.sub
-      local.tee $5
-      i32.eqz
-      br_if $~lib/util/string/parseExp|inlined.0
-      local.get $8
-      i32.const 2
-      i32.add
-      local.tee $8
-      i32.load16_u
-     else
-      local.get $0
-     end
+     call $~lib/rt/pure/decrement
     end
-    local.set $0
-    loop $while-continue|4
-     local.get $0
-     i32.const 48
-     i32.eq
-     if
-      local.get $5
-      i32.const 1
-      i32.sub
-      local.tee $5
-      i32.eqz
-      br_if $~lib/util/string/parseExp|inlined.0
-      local.get $8
-      i32.const 2
-      i32.add
-      local.tee $8
-      i32.load16_u
-      local.set $0
-      br $while-continue|4
-     end
-    end
-    local.get $0
-    i32.const 48
-    i32.sub
-    local.set $0
-    loop $for-loop|5
-     local.get $0
-     i32.const 10
-     i32.lt_u
-     i32.const 0
-     local.get $5
-     select
-     if
-      local.get $3
-      i32.const 3200
-      i32.ge_s
-      if
-       local.get $1
-       i32.const 3200
-       i32.mul
-       local.set $15
-       br $~lib/util/string/parseExp|inlined.0
-      end
-      local.get $0
-      local.get $3
-      i32.const 10
-      i32.mul
-      i32.add
-      local.set $3
-      local.get $5
-      i32.const 1
-      i32.sub
-      local.set $5
-      local.get $8
-      i32.const 2
-      i32.add
-      local.tee $8
-      i32.load16_u
-      i32.const 48
-      i32.sub
-      local.set $0
-      br $for-loop|5
-     end
-    end
-    local.get $1
-    local.get $3
-    i32.mul
-    local.set $15
    end
-   block $~lib/util/string/scientific|inlined.0
-    i32.const 1
-    local.get $4
-    local.get $15
-    i32.add
-    local.tee $0
-    i32.const -342
-    i32.lt_s
-    local.get $6
-    i64.eqz
-    select
-    br_if $~lib/util/string/scientific|inlined.0
-    local.get $0
-    i32.const 308
-    i32.gt_s
-    if
-     f64.const inf
-     local.set $11
-     br $~lib/util/string/scientific|inlined.0
-    end
-    local.get $6
-    f64.convert_i64_u
-    local.set $11
-    local.get $0
-    i32.eqz
-    br_if $~lib/util/string/scientific|inlined.0
-    local.get $0
-    i32.const 37
-    i32.le_s
-    i32.const 0
-    local.get $0
-    i32.const 22
-    i32.gt_s
-    select
-    if
-     local.get $11
-     local.get $0
-     i32.const 3
-     i32.shl
-     i32.const 2824
-     i32.add
-     f64.load
-     f64.mul
-     local.set $11
-     i32.const 22
-     local.set $0
-    end
-    local.get $6
-    i64.const 9007199254740991
-    i64.le_u
-    if (result i32)
-     local.get $0
-     i32.const 31
-     i32.shr_s
-     local.tee $1
-     local.get $0
-     local.get $1
-     i32.add
-     i32.xor
-     i32.const 22
-     i32.le_s
-    else
-     i32.const 0
-    end
-    if (result f64)
-     local.get $0
-     i32.const 0
-     i32.gt_s
-     if
-      local.get $11
-      local.get $0
-      i32.const 3
-      i32.shl
-      i32.const 3000
-      i32.add
-      f64.load
-      f64.mul
-      local.set $11
-      br $~lib/util/string/scientific|inlined.0
-     end
-     local.get $11
-     i32.const 0
-     local.get $0
-     i32.sub
-     i32.const 3
-     i32.shl
-     i32.const 3000
-     i32.add
-     f64.load
-     f64.div
-    else
-     local.get $0
-     i32.const 0
-     i32.lt_s
-     if (result f64)
-      local.get $6
-      local.get $6
-      i64.clz
-      local.tee $9
-      i64.shl
-      local.set $6
-      local.get $0
-      local.tee $1
-      i64.extend_i32_s
-      local.get $9
-      i64.sub
-      local.set $9
-      loop $for-loop|6
-       local.get $1
-       i32.const -14
-       i32.le_s
-       if
-        f64.const 0.00004294967296
-        local.get $6
-        i64.const 6103515625
-        i64.rem_u
-        local.get $6
-        i64.const 6103515625
-        i64.div_u
-        local.tee $12
-        i64.clz
-        local.tee $10
-        i64.const 18
-        i64.sub
-        i64.shl
-        f64.convert_i64_u
-        f64.mul
-        f64.nearest
-        i64.trunc_f64_u
-        local.get $12
-        local.get $10
-        i64.shl
-        i64.add
-        local.set $6
-        local.get $9
-        local.get $10
-        i64.sub
-        local.set $9
-        local.get $1
-        i32.const 14
-        i32.add
-        local.set $1
-        br $for-loop|6
-       end
-      end
-      local.get $6
-      i32.const 0
-      local.get $1
-      i32.sub
-      call $~lib/math/ipow32
-      i64.extend_i32_s
-      local.tee $12
-      i64.div_u
-      local.tee $16
-      i64.clz
-      local.set $10
-      local.get $6
-      local.get $12
-      i64.rem_u
-      f64.convert_i64_u
-      i64.reinterpret_f64
-      local.get $10
-      i64.const 52
-      i64.shl
-      i64.add
-      f64.reinterpret_i64
-      local.get $12
-      f64.convert_i64_u
-      f64.div
-      i64.trunc_f64_u
-      local.get $16
-      local.get $10
-      i64.shl
-      i64.add
-      f64.convert_i64_u
-      local.get $9
-      local.get $10
-      i64.sub
-      i32.wrap_i64
-      call $~lib/math/NativeMath.scalbn
-     else
-      local.get $6
-      local.get $6
-      i64.ctz
-      local.tee $9
-      i64.shr_u
-      local.set $6
-      local.get $9
-      local.get $0
-      local.tee $3
-      i64.extend_i32_s
-      i64.add
-      global.set $~lib/util/string/__fixmulShift
-      loop $for-loop|7
-       local.get $3
-       i32.const 13
-       i32.ge_s
-       if
-        i64.const 32
-        local.get $6
-        i64.const 32
-        i64.shr_u
-        i64.const 1220703125
-        i64.mul
-        local.get $6
-        i64.const 4294967295
-        i64.and
-        i64.const 1220703125
-        i64.mul
-        local.tee $6
-        i64.const 32
-        i64.shr_u
-        i64.add
-        local.tee $9
-        i64.const 32
-        i64.shr_u
-        i32.wrap_i64
-        i32.clz
-        local.tee $0
-        i64.extend_i32_u
-        i64.sub
-        local.tee $10
-        global.get $~lib/util/string/__fixmulShift
-        i64.add
-        global.set $~lib/util/string/__fixmulShift
-        local.get $6
-        local.get $0
-        i64.extend_i32_u
-        i64.shl
-        i64.const 31
-        i64.shr_u
-        i64.const 1
-        i64.and
-        local.get $9
-        local.get $0
-        i64.extend_i32_u
-        i64.shl
-        local.get $6
-        i64.const 4294967295
-        i64.and
-        local.get $10
-        i64.shr_u
-        i64.or
-        i64.add
-        local.set $6
-        local.get $3
-        i32.const 13
-        i32.sub
-        local.set $3
-        br $for-loop|7
-       end
-      end
-      local.get $3
-      call $~lib/math/ipow32
-      local.tee $0
-      i64.extend_i32_u
-      local.get $6
-      i64.const 4294967295
-      i64.and
-      i64.mul
-      local.set $9
-      i64.const 32
-      local.get $0
-      i64.extend_i32_u
-      local.get $6
-      i64.const 32
-      i64.shr_u
-      i64.mul
-      local.get $9
-      i64.const 32
-      i64.shr_u
-      i64.add
-      local.tee $6
-      i64.const 32
-      i64.shr_u
-      i32.wrap_i64
-      i32.clz
-      local.tee $0
-      i64.extend_i32_u
-      i64.sub
-      local.tee $10
-      global.get $~lib/util/string/__fixmulShift
-      i64.add
-      global.set $~lib/util/string/__fixmulShift
-      local.get $9
-      local.get $0
-      i64.extend_i32_u
-      i64.shl
-      i64.const 31
-      i64.shr_u
-      i64.const 1
-      i64.and
-      local.get $6
-      local.get $0
-      i64.extend_i32_u
-      i64.shl
-      local.get $9
-      i64.const 4294967295
-      i64.and
-      local.get $10
-      i64.shr_u
-      i64.or
-      i64.add
-      f64.convert_i64_u
-      global.get $~lib/util/string/__fixmulShift
-      i32.wrap_i64
-      call $~lib/math/NativeMath.scalbn
-     end
-    end
-    local.set $11
+   i32.const 1648
+   local.set $1
+  end
+  local.get $1
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $4
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $2
+  i32.add
+  local.tee $3
+  i32.eqz
+  if
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
    end
-   local.get $11
-   local.get $13
-   f64.copysign
+   i32.const 1280
    return
   end
-  f64.const nan:0x8000000000000
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.tee $3
+  local.get $0
+  local.get $2
+  call $~lib/util/memory/memmove
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $1
+  local.get $4
+  call $~lib/util/memory/memmove
+  local.get $1
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
  )
- (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String.__gt (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  block $__inlined_func$~lib/string/String#concat (result i32)
-   local.get $0
-   i32.const 1648
-   local.get $0
-   select
-   local.set $2
-   local.get $1
-   call $~lib/rt/pure/__retain
-   local.tee $0
-   i32.eqz
-   if
-    local.get $0
-    i32.const 1648
-    i32.ne
-    if
-     local.get $0
-     call $~lib/rt/pure/__release
-    end
-    i32.const 1648
-    local.set $0
-   end
-   local.get $2
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $3
-   local.get $0
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $4
-   i32.add
-   local.tee $1
-   i32.eqz
-   if
-    local.get $0
-    call $~lib/rt/pure/__release
-    i32.const 1280
-    br $__inlined_func$~lib/string/String#concat
-   end
-   local.get $1
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.tee $1
-   local.get $2
-   local.get $3
-   call $~lib/memory/memory.copy
-   local.get $1
-   local.get $3
-   i32.add
-   local.get $0
-   local.get $4
-   call $~lib/memory/memory.copy
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-  end
- )
- (func $~lib/string/String.__gt (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  block $folding-inner0
-   i32.const 1
+  block $folding-inner0
+   i32.const 1
    local.get $1
    i32.eqz
    i32.const 1
@@ -4041,12 +4124,20 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    i32.eqz
    br_if $folding-inner0
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $3
    i32.eqz
    if
@@ -4086,12 +4177,20 @@
    select
    br_if $folding-inner0
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    i32.eqz
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $3
    i32.eqz
    if
@@ -4119,7 +4218,11 @@
   (local $3 i32)
   i32.const 1
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $2
   i64.extend_i32_s
   local.get $1
@@ -4134,7 +4237,7 @@
   if
    i32.const 11872
    i32.const 1536
-   i32.const 322
+   i32.const 320
    i32.const 7
    call $~lib/builtins/abort
    unreachable
@@ -4156,13 +4259,16 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   local.get $2
   i32.mul
   i32.const 1
   i32.shl
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $0
   local.get $2
@@ -4180,10 +4286,18 @@
   (local $6 i32)
   (local $7 i32)
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $3
   local.get $1
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.le_u
   if
@@ -4213,7 +4327,11 @@
   i32.xor
   if
    local.get $2
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $5
    local.get $3
    local.get $4
@@ -4222,18 +4340,21 @@
    i32.add
    local.tee $3
    if
+    call $~lib/rt/tlsf/maybeInitialize
     local.get $3
     i32.const 1
     i32.shl
     i32.const 1
-    call $~lib/rt/tlsf/__alloc
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
     local.tee $3
     local.get $0
     local.get $1
     i32.const 1
     i32.shl
     local.tee $7
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $3
     local.get $7
     i32.add
@@ -4241,7 +4362,7 @@
     local.get $5
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $3
     local.get $1
     local.get $5
@@ -4261,7 +4382,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $3
     call $~lib/rt/pure/__retain
     return
@@ -4305,7 +4426,7 @@
   if
    i32.const 0
    i32.const 1360
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4358,7 +4479,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $6
+  local.tee $4
+  local.set $6
+  local.get $4
   i32.load
   local.tee $4
   i32.const 1
@@ -4381,10 +4504,10 @@
     local.get $6
     call $~lib/rt/tlsf/removeBlock
     local.get $1
+    local.get $4
     local.get $5
     i32.const 3
     i32.and
-    local.get $4
     i32.or
     i32.store
     local.get $1
@@ -4414,7 +4537,7 @@
   i32.const 16
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   i32.const 17912
   i32.ge_u
@@ -4428,15 +4551,6 @@
   end
   local.get $3
  )
- (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  call $~lib/rt/tlsf/checkUsedBlock
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
  (func $~lib/string/String#replaceAll (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -4447,13 +4561,21 @@
   (local $9 i32)
   (local $10 i32)
   local.get $2
-  local.set $5
+  local.set $4
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $3
   local.get $1
-  local.tee $4
-  call $~lib/string/String#get:length
+  local.tee $5
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $10
   i32.le_u
   if
@@ -4464,18 +4586,22 @@
     local.get $0
     call $~lib/rt/pure/__retain
    else
-    local.get $5
-    local.get $0
     local.get $4
     local.get $0
+    local.get $5
+    local.get $0
     call $~lib/string/String.__eq
     select
     call $~lib/rt/pure/__retain
    end
    return
   end
-  local.get $5
-  call $~lib/string/String#get:length
+  local.get $4
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.set $2
   local.get $10
   i32.eqz
@@ -4487,6 +4613,7 @@
     call $~lib/rt/pure/__retain
     return
    end
+   call $~lib/rt/tlsf/maybeInitialize
    local.get $3
    local.get $2
    local.get $3
@@ -4497,13 +4624,15 @@
    i32.const 1
    i32.shl
    i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.tee $4
-   local.get $5
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $6
+   local.get $4
    local.get $2
    i32.const 1
    i32.shl
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
    local.get $2
    local.set $1
    loop $for-loop|0
@@ -4511,7 +4640,7 @@
     local.get $3
     i32.lt_u
     if
-     local.get $4
+     local.get $6
      local.get $1
      i32.const 1
      i32.shl
@@ -4523,7 +4652,7 @@
      i32.add
      i32.load16_u
      i32.store16
-     local.get $4
+     local.get $6
      local.get $1
      i32.const 1
      i32.add
@@ -4531,11 +4660,11 @@
      i32.const 1
      i32.shl
      i32.add
-     local.get $5
+     local.get $4
      local.get $2
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $1
      local.get $2
      i32.add
@@ -4547,7 +4676,7 @@
      br $for-loop|0
     end
    end
-   local.get $4
+   local.get $6
    call $~lib/rt/pure/__retain
    return
   end
@@ -4555,36 +4684,39 @@
   local.get $10
   i32.eq
   if
+   call $~lib/rt/tlsf/maybeInitialize
    local.get $3
    i32.const 1
    i32.shl
-   local.tee $3
+   local.tee $6
    i32.const 1
-   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
    local.tee $1
    local.get $0
-   local.get $3
-   call $~lib/memory/memory.copy
+   local.get $6
+   call $~lib/util/memory/memmove
    loop $while-continue|1
     local.get $0
-    local.get $4
+    local.get $5
     local.get $7
     call $~lib/string/String#indexOf
-    local.tee $3
+    local.tee $6
     i32.const -1
     i32.xor
     if
      local.get $1
-     local.get $3
+     local.get $6
      i32.const 1
      i32.shl
      i32.add
-     local.get $5
+     local.get $4
      local.get $2
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
-     local.get $3
+     call $~lib/util/memory/memmove
+     local.get $6
      local.get $10
      i32.add
      local.set $7
@@ -4599,7 +4731,7 @@
   local.set $1
   loop $while-continue|2
    local.get $0
-   local.get $4
+   local.get $5
    local.get $7
    call $~lib/string/String#indexOf
    local.tee $9
@@ -4609,25 +4741,32 @@
     local.get $6
     i32.eqz
     if
+     call $~lib/rt/tlsf/maybeInitialize
      local.get $3
      i32.const 1
      i32.shl
      i32.const 1
-     call $~lib/rt/tlsf/__alloc
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
      local.set $6
     end
     local.get $8
     local.get $1
     i32.gt_u
     if
+     call $~lib/rt/tlsf/maybeInitialize
      local.get $6
+     call $~lib/rt/tlsf/checkUsedBlock
      local.get $1
      i32.const 1
      i32.shl
      local.tee $1
      i32.const 1
      i32.shl
-     call $~lib/rt/tlsf/__realloc
+     call $~lib/rt/tlsf/reallocateBlock
+     i32.const 16
+     i32.add
      local.set $6
     end
     local.get $6
@@ -4646,7 +4785,7 @@
     local.tee $7
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $6
     local.get $7
     local.get $8
@@ -4655,11 +4794,11 @@
     i32.const 1
     i32.shl
     i32.add
-    local.get $5
+    local.get $4
     local.get $2
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $2
     local.get $7
     i32.add
@@ -4677,14 +4816,18 @@
    local.get $1
    i32.gt_u
    if
+    call $~lib/rt/tlsf/maybeInitialize
     local.get $6
+    call $~lib/rt/tlsf/checkUsedBlock
     local.get $1
     i32.const 1
     i32.shl
     local.tee $1
     i32.const 1
     i32.shl
-    call $~lib/rt/tlsf/__realloc
+    call $~lib/rt/tlsf/reallocateBlock
+    i32.const 16
+    i32.add
     local.set $6
    end
    local.get $3
@@ -4705,7 +4848,7 @@
     local.get $2
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
    end
    local.get $1
    local.get $2
@@ -4713,15 +4856,19 @@
    i32.add
    local.tee $0
    i32.gt_u
-   if (result i32)
+   if
+    call $~lib/rt/tlsf/maybeInitialize
     local.get $6
+    call $~lib/rt/tlsf/checkUsedBlock
     local.get $0
     i32.const 1
     i32.shl
-    call $~lib/rt/tlsf/__realloc
-   else
-    local.get $6
+    call $~lib/rt/tlsf/reallocateBlock
+    i32.const 16
+    i32.add
+    local.set $6
    end
+   local.get $6
    call $~lib/rt/pure/__retain
    return
   end
@@ -4731,7 +4878,11 @@
  (func $~lib/string/String#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.set $3
   local.get $1
   i32.const 0
@@ -4785,12 +4936,15 @@
    i32.const 1280
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $2
   i32.const 1
   i32.shl
   local.tee $2
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $0
   local.get $1
@@ -4798,7 +4952,7 @@
   i32.shl
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   call $~lib/rt/pure/__retain
  )
@@ -4812,7 +4966,11 @@
   select
   local.tee $2
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $3
   local.get $1
   i32.const 0
@@ -4845,9 +5003,12 @@
    i32.const 1280
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $2
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $0
   local.get $1
@@ -4855,7 +5016,7 @@
   i32.shl
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   call $~lib/rt/pure/__retain
  )
@@ -4870,7 +5031,11 @@
   select
   local.tee $3
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $1
   local.get $3
   local.get $1
@@ -4926,15 +5091,18 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $3
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
   local.get $0
   local.get $2
   i32.add
   local.get $3
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $1
   call $~lib/rt/pure/__retain
  )
@@ -4942,16 +5110,22 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   i32.const 2
   i32.shl
   local.tee $2
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   call $~lib/rt/pure/__retain
   i32.store
@@ -4966,161 +5140,171 @@
   i32.store offset=12
   local.get $1
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
   (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -5133,7 +5317,7 @@
   (local $7 i32)
   local.get $0
   i32.load offset=12
-  local.tee $6
+  local.tee $7
   i32.const 1
   i32.add
   local.tee $3
@@ -5157,23 +5341,28 @@
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $4
    local.get $0
    i32.load
-   local.tee $7
+   local.set $5
+   local.get $4
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $5
+   call $~lib/rt/tlsf/checkUsedBlock
    local.get $2
    i32.const 2
    i32.shl
-   local.tee $5
-   call $~lib/rt/tlsf/__realloc
+   local.tee $6
+   call $~lib/rt/tlsf/reallocateBlock
+   i32.const 16
+   i32.add
    local.tee $2
    i32.add
-   local.get $5
+   local.get $6
    local.get $4
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
    local.get $2
-   local.get $7
+   local.get $5
    i32.ne
    if
     local.get $0
@@ -5184,12 +5373,12 @@
     i32.store offset=4
    end
    local.get $0
-   local.get $5
+   local.get $6
    i32.store offset=8
   end
   local.get $0
   i32.load offset=4
-  local.get $6
+  local.get $7
   i32.const 2
   i32.shl
   i32.add
@@ -5228,20 +5417,30 @@
     return
    end
    local.get $0
-   call $~lib/string/String#get:length
-   local.set $5
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.set $3
    i32.const 2147483647
    local.get $2
    local.get $2
    i32.const 0
    i32.lt_s
    select
-   local.set $2
+   local.set $6
    local.get $1
-   call $~lib/string/String#get:length
-   local.tee $8
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.tee $2
+   local.set $8
+   local.get $2
    if
-    local.get $5
+    local.get $3
     i32.eqz
     if
      i32.const 1
@@ -5255,13 +5454,13 @@
      return
     end
    else
-    local.get $5
+    local.get $3
     i32.eqz
     br_if $folding-inner0
-    local.get $5
-    local.get $2
-    local.get $5
-    local.get $2
+    local.get $3
+    local.get $6
+    local.get $3
+    local.get $6
     i32.lt_s
     select
     local.tee $2
@@ -5269,37 +5468,40 @@
     call $~lib/rt/pure/__retain
     local.tee $4
     i32.load offset=4
-    local.set $5
+    local.set $3
     loop $for-loop|0
-     local.get $3
+     local.get $5
      local.get $2
      i32.lt_s
      if
+      call $~lib/rt/tlsf/maybeInitialize
       i32.const 2
       i32.const 1
-      call $~lib/rt/tlsf/__alloc
+      call $~lib/rt/tlsf/allocateBlock
+      i32.const 16
+      i32.add
       local.tee $1
-      local.get $3
+      local.get $0
+      local.get $5
       i32.const 1
       i32.shl
-      local.get $0
       i32.add
       i32.load16_u
       i32.store16
       local.get $3
+      local.get $5
       i32.const 2
       i32.shl
-      local.get $5
       i32.add
       local.get $1
       i32.store
       local.get $1
       call $~lib/rt/pure/__retain
       drop
-      local.get $3
+      local.get $5
       i32.const 1
       i32.add
-      local.set $3
+      local.set $5
       br $for-loop|0
      end
     end
@@ -5309,42 +5511,45 @@
    i32.const 0
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.set $3
+   local.set $2
    loop $while-continue|1
     local.get $0
     local.get $1
     local.get $4
     call $~lib/string/String#indexOf
-    local.tee $7
+    local.tee $5
     i32.const -1
     i32.xor
     if
-     local.get $7
+     local.get $5
      local.get $4
      i32.sub
-     local.tee $6
+     local.tee $7
      i32.const 0
      i32.gt_s
      if
-      local.get $6
+      call $~lib/rt/tlsf/maybeInitialize
+      local.get $7
       i32.const 1
       i32.shl
-      local.tee $6
+      local.tee $7
       i32.const 1
-      call $~lib/rt/tlsf/__alloc
+      call $~lib/rt/tlsf/allocateBlock
+      i32.const 16
+      i32.add
       local.tee $9
+      local.get $0
       local.get $4
       i32.const 1
       i32.shl
-      local.get $0
       i32.add
-      local.get $6
-      call $~lib/memory/memory.copy
-      local.get $3
+      local.get $7
+      call $~lib/util/memory/memmove
+      local.get $2
       local.get $9
       call $~lib/array/Array<~lib/string/String>#push
      else
-      local.get $3
+      local.get $2
       i32.const 1280
       call $~lib/array/Array<~lib/string/String>#push
      end
@@ -5352,13 +5557,13 @@
      i32.const 1
      i32.add
      local.tee $10
-     local.get $2
+     local.get $6
      i32.eq
      if
-      local.get $3
+      local.get $2
       return
      end
-     local.get $7
+     local.get $5
      local.get $8
      i32.add
      local.set $4
@@ -5368,42 +5573,45 @@
    local.get $4
    i32.eqz
    if
-    local.get $3
+    local.get $2
     local.get $0
     call $~lib/array/Array<~lib/string/String>#push
-    local.get $3
+    local.get $2
     return
    end
-   local.get $5
+   local.get $3
    local.get $4
    i32.sub
    local.tee $1
    i32.const 0
    i32.gt_s
    if
+    call $~lib/rt/tlsf/maybeInitialize
     local.get $1
     i32.const 1
     i32.shl
     local.tee $1
     i32.const 1
-    call $~lib/rt/tlsf/__alloc
-    local.tee $2
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
+    local.tee $3
+    local.get $0
     local.get $4
     i32.const 1
     i32.shl
-    local.get $0
     i32.add
     local.get $1
-    call $~lib/memory/memory.copy
-    local.get $3
+    call $~lib/util/memory/memmove
     local.get $2
+    local.get $3
     call $~lib/array/Array<~lib/string/String>#push
    else
-    local.get $3
+    local.get $2
     i32.const 1280
     call $~lib/array/Array<~lib/string/String>#push
    end
-   local.get $3
+   local.get $2
    return
   end
   i32.const 0
@@ -5435,7 +5643,14 @@
   i32.eqz
   if
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    i32.const 13248
    i32.const 13136
    i32.const 108
@@ -5487,7 +5702,7 @@
   i32.lt_u
   select
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -5527,7 +5742,7 @@
   local.get $0
   i32.const 31
   i32.shr_u
-  local.tee $1
+  local.tee $2
   if
    i32.const 0
    local.get $0
@@ -5536,24 +5751,29 @@
   end
   local.get $0
   call $~lib/util/number/decimalCount32
-  local.get $1
+  local.get $2
   i32.add
   local.tee $3
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   local.get $0
   local.get $3
-  call $~lib/util/number/utoa_simple<u32>
-  local.get $1
+  call $~lib/util/number/utoa32_core
+  local.get $2
   if
-   local.get $2
+   local.get $1
    i32.const 45
    i32.store16
   end
-  local.get $2
+  local.get $1
   call $~lib/rt/pure/__retain
  )
  (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
@@ -5567,16 +5787,21 @@
   end
   local.get $0
   call $~lib/util/number/decimalCount32
-  local.tee $1
+  local.tee $2
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   local.get $0
-  local.get $1
-  call $~lib/util/number/utoa_simple<u32>
   local.get $2
+  call $~lib/util/number/utoa32_core
+  local.get $1
   call $~lib/rt/pure/__retain
  )
  (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32)
@@ -5625,7 +5850,7 @@
   i64.lt_u
   select
  )
- (func $~lib/util/number/utoa_simple<u64> (param $0 i32) (param $1 i64) (param $2 i32)
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -5671,31 +5896,41 @@
   if
    local.get $0
    i32.wrap_i64
-   local.tee $1
+   local.tee $2
    call $~lib/util/number/decimalCount32
    local.tee $3
    i32.const 1
    i32.shl
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.tee $2
+   local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
    local.get $1
+   i32.const 1
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $1
+   local.get $2
    local.get $3
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
-   local.tee $1
+   local.tee $2
    i32.const 1
    i32.shl
+   local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $1
    i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.tee $2
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $1
    local.get $0
-   local.get $1
-   call $~lib/util/number/utoa_simple<u64>
+   local.get $2
+   call $~lib/util/number/utoa64_core
   end
-  local.get $2
+  local.get $1
   call $~lib/rt/pure/__retain
  )
  (func $~lib/util/number/itoa64 (param $0 i64) (result i32)
@@ -5713,7 +5948,7 @@
   i64.const 63
   i64.shr_u
   i32.wrap_i64
-  local.tee $1
+  local.tee $2
   if
    i64.const 0
    local.get $0
@@ -5726,79 +5961,190 @@
   if
    local.get $0
    i32.wrap_i64
-   local.tee $2
+   local.tee $3
    call $~lib/util/number/decimalCount32
-   local.get $1
+   local.get $2
    i32.add
    local.tee $4
    i32.const 1
    i32.shl
+   local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $1
    i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.tee $3
-   local.get $2
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $1
+   local.get $3
    local.get $4
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
-   local.get $1
+   local.get $2
    i32.add
-   local.tee $2
+   local.tee $3
    i32.const 1
    i32.shl
+   local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $1
    i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.tee $3
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $1
    local.get $0
-   local.get $2
-   call $~lib/util/number/utoa_simple<u64>
+   local.get $3
+   call $~lib/util/number/utoa64_core
   end
-  local.get $1
+  local.get $2
   if
-   local.get $3
+   local.get $1
    i32.const 45
    i32.store16
   end
-  local.get $3
+  local.get $1
   call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
+  local.get $3
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (param $5 i32) (result i32)
+  (local $6 i32)
   (local $7 i32)
-  (local $8 i64)
+  (local $8 i32)
   (local $9 i64)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i64)
   (local $12 i64)
-  (local $13 i64)
-  local.get $3
+  local.get $2
   local.get $1
   i64.sub
   local.set $9
-  local.get $3
+  local.get $2
   i64.const 1
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
-  local.tee $10
+  local.tee $8
   i64.extend_i32_s
   i64.shl
-  local.tee $11
+  local.tee $10
   i64.const 1
   i64.sub
-  local.tee $12
+  local.tee $11
   i64.and
-  local.set $8
-  local.get $3
-  local.get $10
+  local.set $1
+  local.get $2
+  local.get $8
   i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $7
+  local.tee $6
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $3
   loop $while-continue|0
-   local.get $4
+   local.get $3
    i32.const 0
    i32.gt_s
    if
@@ -5813,403 +6159,474 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
-               local.tee $2
+               local.get $3
+               local.tee $7
                i32.const 10
                i32.ne
                if
-                local.get $2
+                local.get $7
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $7
+               local.get $6
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $7
+               local.set $3
+               local.get $6
                i32.const 1000000000
                i32.rem_u
-               local.set $7
+               local.set $6
                br $break|1
               end
-              local.get $7
+              local.get $6
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $7
+              local.set $3
+              local.get $6
               i32.const 100000000
               i32.rem_u
-              local.set $7
+              local.set $6
               br $break|1
              end
-             local.get $7
+             local.get $6
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $7
+             local.set $3
+             local.get $6
              i32.const 10000000
              i32.rem_u
-             local.set $7
+             local.set $6
              br $break|1
             end
-            local.get $7
+            local.get $6
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $7
+            local.set $3
+            local.get $6
             i32.const 1000000
             i32.rem_u
-            local.set $7
+            local.set $6
             br $break|1
            end
-           local.get $7
+           local.get $6
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $7
+           local.set $3
+           local.get $6
            i32.const 100000
            i32.rem_u
-           local.set $7
+           local.set $6
            br $break|1
           end
-          local.get $7
+          local.get $6
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $7
+          local.set $3
+          local.get $6
           i32.const 10000
           i32.rem_u
-          local.set $7
+          local.set $6
           br $break|1
          end
-         local.get $7
+         local.get $6
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $7
+         local.set $3
+         local.get $6
          i32.const 1000
          i32.rem_u
-         local.set $7
+         local.set $6
          br $break|1
         end
-        local.get $7
+        local.get $6
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $7
+        local.set $3
+        local.get $6
         i32.const 100
         i32.rem_u
-        local.set $7
+        local.set $6
         br $break|1
        end
-       local.get $7
+       local.get $6
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $7
+       local.set $3
+       local.get $6
        i32.const 10
        i32.rem_u
-       local.set $7
+       local.set $6
        br $break|1
       end
-      local.get $7
-      local.set $2
+      local.get $6
+      local.set $3
       i32.const 0
-      local.set $7
+      local.set $6
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $6
+    local.get $3
+    local.get $5
     i32.or
     if
      local.get $0
-     local.get $6
+     local.get $5
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $6
+     local.get $5
      i32.const 1
      i32.add
-     local.set $6
+     local.set $5
     end
-    local.get $4
+    local.get $7
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $8
-    local.get $7
+    local.set $3
+    local.get $1
+    local.get $6
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $3
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $5
      local.get $4
+     local.get $2
+     local.get $3
      i32.const 2
      i32.shl
      i32.const 16200
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $6
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $2
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $2
-     local.get $4
-     i32.store16
-     local.get $6
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $5
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $13
-  loop $while-continue|4 (result i32)
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $8
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $13
-   i64.shr_u
    local.tee $1
-   local.get $6
+   local.get $2
+   i64.shr_u
+   local.tee $12
+   local.get $5
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $6
+    local.get $5
     i32.const 1
     i32.shl
     i32.add
-    local.get $1
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
     i32.store16
-    local.get $6
+    local.get $5
     i32.const 1
     i32.add
-    local.set $6
+    local.set $5
    end
-   local.get $4
-   i32.const 1
-   i32.sub
-   local.set $4
    local.get $3
-   local.get $12
-   i64.and
-   local.tee $8
-   local.get $5
-   i64.ge_u
-   br_if $while-continue|4
-   local.get $4
-   global.get $~lib/util/number/_K
-   i32.add
-   global.set $~lib/util/number/_K
-   local.get $8
-   local.set $1
-   local.get $9
-   i32.const 0
-   local.get $4
-   i32.sub
-   i32.const 2
-   i32.shl
-   i32.const 16200
-   i32.add
-   i64.load32_u
-   i64.mul
-   local.set $3
-   local.get $0
-   local.get $6
    i32.const 1
    i32.sub
-   i32.const 1
-   i32.shl
-   i32.add
-   local.tee $2
-   i32.load16_u
-   local.set $4
-   loop $while-continue|6
-    i32.const 1
-    local.get $3
-    local.get $1
-    i64.sub
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.sub
-    i64.gt_u
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.lt_u
-    select
-    i32.const 0
-    local.get $5
-    local.get $1
-    i64.sub
-    local.get $11
-    i64.ge_u
-    i32.const 0
-    local.get $1
-    local.get $3
-    i64.lt_u
-    select
-    select
-    if
-     local.get $4
-     i32.const 1
-     i32.sub
-     local.set $4
-     local.get $1
-     local.get $11
-     i64.add
-     local.set $1
-     br $while-continue|6
-    end
-   end
-   local.get $2
-   local.get $4
-   i32.store16
-   local.get $6
-  end
- )
- (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $2
-  i32.eqz
-  if
-   local.get $0
-   local.get $1
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 3145774
-   i32.store
+   local.set $3
    local.get $1
-   i32.const 2
-   i32.add
-   return
+   local.get $11
+   i64.and
+   local.tee $1
+   local.get $4
+   i64.ge_u
+   br_if $while-continue|2
   end
+  local.get $3
+  global.get $~lib/util/number/_K
+  i32.add
+  global.set $~lib/util/number/_K
+  local.get $0
+  local.get $5
+  local.get $4
   local.get $1
-  local.get $1
-  local.get $2
+  local.get $10
+  local.get $9
+  i32.const 0
+  local.get $3
+  i32.sub
+  i32.const 2
+  i32.shl
+  i32.const 16200
   i32.add
-  local.tee $3
-  i32.le_s
-  if (result i32)
-   local.get $3
-   i32.const 21
-   i32.le_s
-  else
-   i32.const 0
-  end
-  if (result i32)
-   loop $for-loop|0
-    local.get $1
-    local.get $3
-    i32.lt_s
-    if
-     local.get $0
-     local.get $1
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.const 48
-     i32.store16
-     local.get $1
-     i32.const 1
-     i32.add
-     local.set $1
-     br $for-loop|0
-    end
-   end
-   local.get $0
-   local.get $3
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 3145774
+  i64.load32_u
+  i64.mul
+  call $~lib/util/number/grisuRound
+  local.get $5
+ )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i32)
+  (local $6 i64)
+  (local $7 i32)
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $4
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $5
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $4
+  i64.const 4503599627370495
+  i64.and
+  i64.add
+  local.tee $4
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.tee $6
+  i64.clz
+  i32.wrap_i64
+  local.set $3
+  local.get $6
+  local.get $3
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_plus
+  local.get $5
+  i32.const 1
+  local.get $5
+  select
+  i32.const 1075
+  i32.sub
+  local.tee $5
+  i32.const 1
+  i32.sub
+  local.get $3
+  i32.sub
+  local.set $3
+  local.get $4
+  local.get $4
+  i64.const 4503599627370496
+  i64.eq
+  i32.const 1
+  i32.add
+  local.tee $7
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $5
+  local.get $7
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+  i32.const 348
+  i32.const -61
+  global.get $~lib/util/number/_exp
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.tee $0
+  i32.trunc_f64_s
+  local.tee $3
+  local.get $3
+  f64.convert_i32_s
+  local.get $0
+  f64.ne
+  i32.add
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.tee $3
+  i32.const 3
+  i32.shl
+  local.tee $7
+  i32.sub
+  global.set $~lib/util/number/_K
+  local.get $7
+  i32.const 15328
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.const 16024
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $3
+  local.get $1
+  local.get $4
+  local.get $4
+  i64.clz
+  i32.wrap_i64
+  i64.extend_i32_s
+  i64.shl
+  global.get $~lib/util/number/_frc_pow
+  local.tee $4
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $6
+  global.get $~lib/util/number/_exp
+  local.get $3
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $6
+  global.get $~lib/util/number/_frc_minus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $1
+ )
+ (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $1
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 3145774
+   i32.store
+   local.get $1
+   i32.const 2
+   i32.add
+   return
+  end
+  local.get $1
+  local.get $1
+  local.get $2
+  i32.add
+  local.tee $3
+  i32.le_s
+  if (result i32)
+   local.get $3
+   i32.const 21
+   i32.le_s
+  else
+   i32.const 0
+  end
+  if (result i32)
+   loop $for-loop|0
+    local.get $1
+    local.get $3
+    i32.lt_s
+    if
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.const 48
+     i32.store16
+     local.get $1
+     i32.const 1
+     i32.add
+     local.set $1
+     br $for-loop|0
+    end
+   end
+   local.get $0
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 3145774
    i32.store
    local.get $3
    i32.const 2
@@ -6238,7 +6655,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $0
     i32.const 46
     i32.store16
@@ -6267,7 +6684,7 @@
      local.get $1
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $0
      i32.const 3014704
      i32.store
@@ -6304,36 +6721,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $1
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       i32.const 2
       i32.add
      else
@@ -6349,7 +6742,7 @@
       local.tee $2
       i32.const 2
       i32.sub
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $0
       i32.const 46
       i32.store16 offset=2
@@ -6360,37 +6753,13 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $2
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
-      local.get $0
-      local.get $1
+      call $~lib/util/number/genExponent
+      local.get $1
       i32.add
       i32.const 2
       i32.add
@@ -6399,349 +6768,90 @@
    end
   end
  )
- (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i32)
-  (local $7 i64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i64)
-  local.get $1
+ (func $~lib/util/number/dtoa (param $0 f64) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
   f64.const 0
-  f64.lt
-  local.tee $8
-  if (result f64)
+  f64.eq
+  if
+   i32.const 15280
+   return
+  end
+  local.get $0
+  local.get $0
+  f64.sub
+  f64.const 0
+  f64.ne
+  if
+   local.get $0
+   local.get $0
+   f64.ne
+   if
+    i32.const 5808
+    return
+   end
+   i32.const 7024
+   i32.const 15312
    local.get $0
+   f64.const 0
+   f64.lt
+   select
+   call $~lib/rt/pure/__retain
+   return
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 56
+  i32.const 1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $3
+  local.set $2
+  local.get $0
+  f64.const 0
+  f64.lt
+  local.tee $1
+  if
+   local.get $2
    i32.const 45
    i32.store16
-   local.get $1
+   local.get $0
    f64.neg
-  else
-   local.get $1
+   local.set $0
   end
-  i64.reinterpret_f64
-  local.tee $3
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.tee $6
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $3
-  i64.const 4503599627370495
-  i64.and
-  i64.add
-  local.tee $2
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.tee $3
-  local.get $3
-  i64.clz
-  i32.wrap_i64
-  local.tee $4
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_plus
-  local.get $6
-  i32.const 1
-  local.get $6
-  select
-  i32.const 1075
-  i32.sub
-  local.tee $6
-  i32.const 1
-  i32.sub
-  local.get $4
-  i32.sub
-  local.set $4
   local.get $2
-  local.get $2
-  i64.const 4503599627370496
-  i64.eq
-  i32.const 1
-  i32.add
-  local.tee $9
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $6
-  local.get $9
-  i32.sub
-  local.get $4
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $4
-  global.set $~lib/util/number/_exp
-  i32.const 348
-  i32.const -61
-  global.get $~lib/util/number/_exp
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.tee $1
-  i32.trunc_f64_s
-  local.tee $4
-  local.get $4
-  f64.convert_i32_s
   local.get $1
-  f64.ne
-  i32.add
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.tee $4
-  i32.const 3
-  i32.shl
-  local.tee $9
-  i32.sub
-  global.set $~lib/util/number/_K
-  local.get $9
-  i32.const 15328
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  local.get $4
-  i32.const 1
-  i32.shl
-  i32.const 16024
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  global.get $~lib/util/number/_frc_pow
-  local.tee $3
-  i64.const 4294967295
-  i64.and
-  local.set $5
-  local.get $0
-  local.get $8
   i32.const 1
   i32.shl
   i32.add
   local.get $0
   local.get $2
-  local.get $2
-  i64.clz
-  i32.wrap_i64
-  local.tee $0
-  i64.extend_i32_s
-  i64.shl
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $10
-  i64.mul
-  local.get $5
-  local.get $7
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $5
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $10
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $4
-  local.get $6
-  local.get $0
+  local.get $1
+  call $~lib/util/number/grisu2
+  local.get $1
   i32.sub
+  global.get $~lib/util/number/_K
+  call $~lib/util/number/prettify
+  local.get $1
   i32.add
-  i32.const -64
-  i32.sub
-  global.get $~lib/util/number/_frc_plus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
+  local.tee $1
+  local.set $2
+  local.get $1
+  i32.const 28
+  i32.eq
+  if
+   local.get $3
+   call $~lib/rt/pure/__retain
+   return
+  end
   local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $10
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $10
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $2
-  local.get $4
-  global.get $~lib/util/number/_exp
-  i32.add
-  i32.const -64
-  i32.sub
-  local.get $2
-  global.get $~lib/util/number/_frc_minus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $3
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $3
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $3
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  local.get $8
-  call $~lib/util/number/genDigits
-  local.get $8
-  i32.sub
-  global.get $~lib/util/number/_K
-  call $~lib/util/number/prettify
-  local.get $8
-  i32.add
- )
- (func $~lib/util/number/dtoa (param $0 f64) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  f64.const 0
-  f64.eq
-  if
-   i32.const 15280
-   return
-  end
-  local.get $0
-  local.get $0
-  f64.sub
-  f64.const 0
-  f64.ne
-  if
-   local.get $0
-   local.get $0
-   f64.ne
-   if
-    i32.const 5808
-    return
-   end
-   i32.const 7024
-   i32.const 15312
-   local.get $0
-   f64.const 0
-   f64.lt
-   select
-   call $~lib/rt/pure/__retain
-   return
-  end
-  i32.const 56
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $1
-  local.get $0
-  call $~lib/util/number/dtoa_core
-  local.tee $2
-  i32.const 28
-  i32.eq
-  if
-   local.get $1
-   call $~lib/rt/pure/__retain
-   return
-  end
-  local.get $1
-  i32.const 0
+  i32.const 0
   local.get $2
   call $~lib/string/String#substring
   call $~lib/rt/tlsf/maybeInitialize
-  local.get $1
+  local.get $3
   call $~lib/rt/tlsf/checkUsedBlock
   call $~lib/rt/tlsf/freeBlock
  )
@@ -6958,7262 +7068,9170 @@
   (local $209 i32)
   (local $210 i32)
   (local $211 i32)
+  (local $212 i32)
   global.get $std/string/str
   i32.const 1040
   i32.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 8
+   i32.const 8
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1136
+  i32.const 1136
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 10
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1216
+  i32.const 1216
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 11
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1248
+  i32.const 1248
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 12
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 16
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 14
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $__inlined_func$~lib/string/String#charCodeAt (result i32)
+   i32.const -1
+   i32.const 0
+   global.get $std/string/str
+   local.tee $0
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   i32.ge_u
+   br_if $__inlined_func$~lib/string/String#charCodeAt
+   drop
+   local.get $0
+   i32.load16_u
+  end
+  i32.const 104
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 15
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  call $~lib/string/String.__not
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 17
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1296
+  call $~lib/string/String.__not
+  i32.eqz
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 18
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1328
+  call $~lib/string/String.__not
+  i32.eqz
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 19
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $~argumentsLength
+  i32.const 0
+  call $~lib/string/String.fromCharCode@varargs
+  local.tee $43
+  i32.const 1296
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 21
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $~argumentsLength
+  i32.const 54
+  call $~lib/string/String.fromCharCode@varargs
+  local.tee $44
+  i32.const 1472
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 22
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $~argumentsLength
+  i32.const 65590
+  call $~lib/string/String.fromCharCode@varargs
+  local.tee $45
+  i32.const 1472
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 23
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 55296
+  i32.const 57088
+  call $~lib/string/String.fromCharCode
+  local.tee $46
+  i32.const 1504
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 24
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 0
+  call $~lib/string/String.fromCodePoint
+  local.tee $47
+  i32.const 1296
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 26
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 54
+  call $~lib/string/String.fromCodePoint
+  local.tee $48
+  i32.const 1472
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 27
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 119558
+  call $~lib/string/String.fromCodePoint
+  local.tee $49
+  i32.const 1584
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 28
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $__inlined_func$~lib/string/String#startsWith (result i32)
+   i32.const 1612
+   i32.load
+   i32.const 1
+   i32.shr_u
+   local.tee $1
+   local.set $0
+   i32.const 0
+   local.get $1
+   i32.const 0
+   global.get $std/string/str
+   local.tee $3
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.tee $1
+   i32.const 0
+   local.get $1
+   i32.lt_s
+   select
+   local.tee $5
+   i32.add
+   local.get $1
+   i32.gt_s
+   br_if $__inlined_func$~lib/string/String#startsWith
+   drop
+   local.get $3
+   local.get $5
+   i32.const 1616
+   local.get $0
+   call $~lib/util/string/compareImpl
+   i32.eqz
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 30
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  block $__inlined_func$~lib/string/String#endsWith (result i32)
+   i32.const 0
+   i32.const 536870904
+   global.get $std/string/str
+   local.tee $0
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
+   local.tee $3
+   i32.const 536870904
+   local.get $3
+   i32.lt_s
+   select
+   i32.const 1676
+   i32.load
+   i32.const 1
+   i32.shr_u
+   local.tee $3
+   i32.sub
+   local.tee $5
+   i32.const 0
+   i32.lt_s
+   br_if $__inlined_func$~lib/string/String#endsWith
+   drop
+   local.get $0
+   local.get $5
+   i32.const 1680
+   local.get $3
+   call $~lib/util/string/compareImpl
+   i32.eqz
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 31
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 1712
+  i32.const 0
+  call $~lib/string/String#indexOf
+  i32.const -1
+  i32.eq
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 32
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 0
+  i32.const 1744
+  call $~lib/string/String#padStart
+  local.tee $50
+  global.get $std/string/str
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 34
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 15
+  i32.const 1744
+  call $~lib/string/String#padStart
+  local.tee $51
+  global.get $std/string/str
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 35
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 3
+  i32.const 1744
+  call $~lib/string/String#padStart
+  local.tee $52
+  i32.const 1776
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 36
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 10
+  i32.const 1280
+  call $~lib/string/String#padStart
+  local.tee $53
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 37
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1328
+  i32.const 100
+  i32.const 1280
+  call $~lib/string/String#padStart
+  local.tee $54
+  i32.const 1328
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 38
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 5
+  i32.const 1744
+  call $~lib/string/String#padStart
+  local.tee $55
+  i32.const 1840
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 39
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 6
+  i32.const 1872
+  call $~lib/string/String#padStart
+  local.tee $56
+  i32.const 1904
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 40
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 8
+  i32.const 1872
+  call $~lib/string/String#padStart
+  local.tee $57
+  i32.const 1936
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 41
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 0
+  i32.const 1744
+  call $~lib/string/String#padEnd
+  local.tee $58
+  global.get $std/string/str
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 43
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 15
+  i32.const 1744
+  call $~lib/string/String#padEnd
+  local.tee $59
+  global.get $std/string/str
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 44
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 3
+  i32.const 1744
+  call $~lib/string/String#padEnd
+  local.tee $60
+  i32.const 1776
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 45
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 10
+  i32.const 1280
+  call $~lib/string/String#padEnd
+  local.tee $61
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 46
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1328
+  i32.const 100
+  i32.const 1280
+  call $~lib/string/String#padEnd
+  local.tee $62
+  i32.const 1328
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 47
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 5
+  i32.const 1744
+  call $~lib/string/String#padEnd
+  local.tee $63
+  i32.const 1968
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 48
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 6
+  i32.const 1808
+  call $~lib/string/String#padEnd
+  local.tee $64
+  i32.const 2000
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 49
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 8
+  i32.const 1808
+  call $~lib/string/String#padEnd
+  local.tee $65
+  i32.const 2032
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 50
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 1280
+  i32.const 0
+  call $~lib/string/String#indexOf
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 52
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 1616
+  i32.const 0
+  call $~lib/string/String#indexOf
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 53
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1328
+  i32.const 1328
+  i32.const 0
+  call $~lib/string/String#indexOf
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 54
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  global.get $std/string/str
+  i32.const 0
+  call $~lib/string/String#indexOf
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 55
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 1280
+  i32.const 0
+  call $~lib/string/String#indexOf
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 56
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2064
+  i32.const 0
+  call $~lib/string/String#indexOf
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 57
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2096
+  i32.const 0
+  call $~lib/string/String#indexOf
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 58
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2064
+  i32.const 2
+  call $~lib/string/String#indexOf
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 59
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2064
+  i32.const 3
+  call $~lib/string/String#indexOf
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 60
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2128
+  i32.const -1
+  call $~lib/string/String#indexOf
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 61
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 1280
+  i32.const 2147483647
+  call $~lib/string/String#lastIndexOf
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 63
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 1616
+  i32.const 2147483647
+  call $~lib/string/String#lastIndexOf
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 64
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 1280
+  i32.const 2147483647
+  call $~lib/string/String#lastIndexOf
+  global.get $std/string/str
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 65
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2064
+  i32.const 2147483647
+  call $~lib/string/String#lastIndexOf
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 66
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2096
+  i32.const 2147483647
+  call $~lib/string/String#lastIndexOf
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 67
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2160
+  i32.const 2147483647
+  call $~lib/string/String#lastIndexOf
+  i32.const 15
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 68
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2064
+  i32.const 2
+  call $~lib/string/String#lastIndexOf
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 69
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2064
+  i32.const 3
+  call $~lib/string/String#lastIndexOf
+  i32.const 2
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 70
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2128
+  i32.const -1
+  call $~lib/string/String#lastIndexOf
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 71
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 2192
+  i32.const 0
+  call $~lib/string/String#lastIndexOf
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 72
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/string/str
+  i32.const 1616
+  i32.const 0
+  call $~lib/string/String#lastIndexOf
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 73
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String#localeCompare
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 75
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1328
+  i32.const 1280
+  call $~lib/string/String#localeCompare
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 76
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 1328
+  call $~lib/string/String#localeCompare
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 77
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1648
+  i32.const 1648
+  call $~lib/string/String#localeCompare
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 78
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 2224
+  call $~lib/string/String#localeCompare
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 79
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2224
+  i32.const 1808
+  call $~lib/string/String#localeCompare
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 80
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2256
+  i32.const 1808
+  call $~lib/string/String#localeCompare
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 81
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1808
+  i32.const 2256
+  call $~lib/string/String#localeCompare
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 82
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  i32.const 1776
+  call $~lib/string/String#localeCompare
+  i32.const -1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 83
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1296
+  i32.const 1280
+  call $~lib/string/String#localeCompare
+  i32.const 1
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 84
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  call $~lib/string/String#trimStart
+  local.tee $66
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 86
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2288
+  call $~lib/string/String#trimStart
+  local.tee $67
+  i32.const 2288
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 87
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2320
+  call $~lib/string/String#trimStart
+  local.tee $68
+  i32.const 2368
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 88
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  call $~lib/string/String#trimEnd
+  local.tee $69
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 90
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2288
+  call $~lib/string/String#trimEnd
+  local.tee $70
+  i32.const 2288
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 91
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2320
+  call $~lib/string/String#trimEnd
+  local.tee $71
+  i32.const 2400
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 92
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  call $~lib/string/String#trim
+  local.tee $72
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 94
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2288
+  call $~lib/string/String#trim
+  local.tee $73
+  i32.const 2288
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 95
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2320
+  call $~lib/string/String#trim
+  local.tee $74
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 96
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2432
+  call $~lib/util/string/strtol<f64>
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 98
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2464
+  call $~lib/util/string/strtol<f64>
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 99
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2496
+  call $~lib/util/string/strtol<f64>
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 100
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2528
+  call $~lib/util/string/strtol<f64>
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 101
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2560
+  call $~lib/util/string/strtol<f64>
+  f64.const 5
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 102
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2592
+  call $~lib/util/string/strtol<f64>
+  f64.const 455
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 103
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2624
+  call $~lib/util/string/strtol<f64>
+  f64.const 3855
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 104
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2656
+  call $~lib/util/string/strtol<f64>
+  f64.const 3855
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 105
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2688
+  call $~lib/util/string/strtol<f64>
+  f64.const 11
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 106
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2720
+  call $~lib/util/string/strtol<f64>
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 107
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2752
+  call $~lib/util/string/strtol<f64>
+  f64.const -123
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 108
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2784
+  call $~lib/util/string/strtol<f64>
+  f64.const 123
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 109
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2816
+  call $~lib/util/string/strtol<f64>
+  f64.const -12
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 110
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2848
+  call $~lib/util/string/strtol<f64>
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 112
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2880
+  call $~lib/util/string/strtol<f64>
+  f64.const 2
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 113
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/util/string/strtol<i32>
+  i32.const 2147483647
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 115
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/util/string/strtol<i64>
+  i64.const 9223372036854775807
+  i64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 116
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2432
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 119
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 2496
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 120
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3200
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 121
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3232
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 122
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3264
+  call $~lib/util/string/strtod
+  f64.const 1e-05
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 123
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3296
+  call $~lib/util/string/strtod
+  f64.const -1e-05
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 124
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3328
+  call $~lib/util/string/strtod
+  f64.const -3e-23
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 125
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3360
+  call $~lib/util/string/strtod
+  f64.const 3e21
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 126
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3392
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 127
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3424
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 128
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3456
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 129
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3488
+  call $~lib/util/string/strtod
+  f64.const 0.25
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 130
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3520
+  call $~lib/util/string/strtod
+  f64.const 1e3
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 131
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3552
+  call $~lib/util/string/strtod
+  f64.const 1e-10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 132
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3584
+  call $~lib/util/string/strtod
+  f64.const 1e-30
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 133
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3616
+  call $~lib/util/string/strtod
+  f64.const 1e-323
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 134
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3648
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 135
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3680
+  call $~lib/util/string/strtod
+  f64.const 1.e+308
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 136
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3712
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 137
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1280
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 138
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3744
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 141
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3776
+  call $~lib/util/string/strtod
+  f64.const 1e-10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 142
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3824
+  call $~lib/util/string/strtod
+  f64.const 10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 143
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3856
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 144
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3888
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 145
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3920
+  call $~lib/util/string/strtod
+  f64.const 10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 146
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 3968
+  call $~lib/util/string/strtod
+  f64.const 123456789
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 147
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4016
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 148
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4064
+  call $~lib/util/string/strtod
+  f64.const 1e-60
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 150
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4096
+  call $~lib/util/string/strtod
+  f64.const 1.e+60
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 151
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4128
+  call $~lib/util/string/strtod
+  f64.const -0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 154
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4160
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 155
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4192
+  call $~lib/util/string/strtod
+  f64.const -1.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 156
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4240
+  call $~lib/util/string/strtod
+  f64.const 10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 157
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4288
+  call $~lib/util/string/strtod
+  f64.const 10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 158
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4336
+  call $~lib/util/string/strtod
+  f64.const 0.022
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 159
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4368
+  call $~lib/util/string/strtod
+  f64.const 11
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 160
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4400
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 161
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4432
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 162
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4464
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 163
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4496
+  call $~lib/util/string/strtod
+  f64.const 1.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 164
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4528
+  call $~lib/util/string/strtod
+  f64.const -1.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 165
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4560
+  call $~lib/util/string/strtod
+  f64.const -1.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 166
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4592
+  call $~lib/util/string/strtod
+  f64.const -1.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 167
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4624
+  call $~lib/util/string/strtod
+  f64.const -1.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 168
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4656
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 169
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4688
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 170
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4720
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 171
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4752
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 172
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4784
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 173
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4816
+  call $~lib/util/string/strtod
+  f64.const 10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 174
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4848
+  call $~lib/util/string/strtod
+  f64.const 10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 175
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4880
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 176
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4912
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 177
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4944
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 178
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 4976
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 179
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5008
+  call $~lib/util/string/strtod
+  f64.const 10
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 180
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5040
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 181
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1136
-  i32.const 1136
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5072
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 10
+   i32.const 182
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1216
-  i32.const 1216
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5104
+  call $~lib/util/string/strtod
+  f64.const 0.01
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 11
+   i32.const 183
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1248
-  i32.const 1248
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5136
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 12
+   i32.const 184
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  call $~lib/string/String#get:length
-  i32.const 16
-  i32.ne
+  i32.const 5168
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 14
+   i32.const 185
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  block $__inlined_func$~lib/string/String#charCodeAt (result i32)
-   i32.const -1
+  i32.const 5200
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
    i32.const 0
-   global.get $std/string/str
-   local.tee $0
-   call $~lib/string/String#get:length
-   i32.ge_u
-   br_if $__inlined_func$~lib/string/String#charCodeAt
-   drop
-   local.get $0
-   i32.load16_u
+   i32.const 1088
+   i32.const 186
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
   end
-  i32.const 104
-  i32.ne
+  i32.const 5232
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 15
+   i32.const 187
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  call $~lib/string/String.__not
-  i32.eqz
+  i32.const 5264
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 17
+   i32.const 188
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1296
-  call $~lib/string/String.__not
-  i32.eqz
-  i32.const 1
-  i32.ne
+  i32.const 5296
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 18
+   i32.const 189
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  call $~lib/string/String.__not
-  i32.eqz
-  i32.const 1
-  i32.ne
+  i32.const 5328
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 19
+   i32.const 190
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1
-  global.set $~argumentsLength
-  i32.const 0
-  call $~lib/string/String.fromCharCode@varargs
-  local.tee $41
-  i32.const 1296
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5360
+  call $~lib/util/string/strtod
+  f64.const 0.1
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 21
+   i32.const 191
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1
-  global.set $~argumentsLength
-  i32.const 54
-  call $~lib/string/String.fromCharCode@varargs
-  local.tee $42
-  i32.const 1472
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5392
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 22
+   i32.const 192
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1
-  global.set $~argumentsLength
-  i32.const 65590
-  call $~lib/string/String.fromCharCode@varargs
-  local.tee $43
-  i32.const 1472
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5424
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 193
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5456
+  call $~lib/util/string/strtod
+  f64.const -0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 194
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5488
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 195
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5520
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 196
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5552
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 197
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5584
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 198
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5616
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 199
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5648
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 200
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5680
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 201
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 5712
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 23
+   i32.const 202
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 55296
-  i32.const 57088
-  call $~lib/string/String.fromCharCode
-  local.tee $44
-  i32.const 1504
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5744
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 24
+   i32.const 203
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 0
-  call $~lib/string/String.fromCodePoint
-  local.tee $45
-  i32.const 1296
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5776
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 26
+   i32.const 204
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 54
-  call $~lib/string/String.fromCodePoint
-  local.tee $46
-  i32.const 1472
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5808
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 27
+   i32.const 205
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 119558
-  call $~lib/string/String.fromCodePoint
-  local.tee $47
-  i32.const 1584
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 5840
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 28
+   i32.const 206
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  local.set $12
-  i32.const 1616
-  local.tee $1
-  i32.eqz
+  i32.const 5872
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
-   i32.const 1616
-   call $~lib/rt/pure/__release
-   i32.const 1648
-   local.set $1
-  end
-  block $__inlined_func$~lib/string/String#startsWith
-   i32.const 0
-   local.get $12
-   call $~lib/string/String#get:length
-   local.tee $11
    i32.const 0
-   local.get $11
-   i32.lt_s
-   select
-   local.tee $8
-   local.get $1
-   call $~lib/string/String#get:length
-   local.tee $0
-   i32.add
-   local.get $11
-   i32.gt_s
-   if
-    local.get $1
-    call $~lib/rt/pure/__release
-    i32.const 0
-    local.set $0
-    br $__inlined_func$~lib/string/String#startsWith
-   end
-   local.get $12
-   local.get $8
-   local.get $1
-   local.get $0
-   call $~lib/util/string/compareImpl
-   i32.eqz
-   local.set $0
-   local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 1088
+   i32.const 207
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $0
-  i32.eqz
+  i32.const 5904
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 30
+   i32.const 208
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  block $__inlined_func$~lib/string/String#endsWith (result i32)
-   i32.const 0
-   i32.const 536870904
-   global.get $std/string/str
-   local.tee $8
-   call $~lib/string/String#get:length
-   local.tee $0
-   i32.const 536870904
-   local.get $0
-   i32.lt_s
-   select
-   i32.const 1680
-   call $~lib/string/String#get:length
-   local.tee $1
-   i32.sub
-   local.tee $0
-   i32.const 0
-   i32.lt_s
-   br_if $__inlined_func$~lib/string/String#endsWith
-   drop
-   local.get $8
-   local.get $0
-   i32.const 1680
-   local.get $1
-   call $~lib/util/string/compareImpl
-   i32.eqz
-  end
-  i32.eqz
+  i32.const 5936
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 31
+   i32.const 209
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 1712
-  i32.const 0
-  call $~lib/string/String#indexOf
-  i32.const -1
-  i32.eq
+  i32.const 5968
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 32
+   i32.const 210
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const 1744
-  call $~lib/string/String#padStart
-  local.tee $48
-  global.get $std/string/str
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6000
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 34
+   i32.const 211
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 15
-  i32.const 1744
-  call $~lib/string/String#padStart
-  local.tee $49
-  global.get $std/string/str
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6032
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 35
+   i32.const 212
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 3
-  i32.const 1744
-  call $~lib/string/String#padStart
-  local.tee $50
-  i32.const 1776
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6064
+  call $~lib/util/string/strtod
+  f64.const 1e22
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 36
+   i32.const 213
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 10
-  i32.const 1280
-  call $~lib/string/String#padStart
-  local.tee $51
-  i32.const 1280
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6096
+  call $~lib/util/string/strtod
+  f64.const 1e-22
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 37
+   i32.const 214
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 100
-  i32.const 1280
-  call $~lib/string/String#padStart
-  local.tee $52
-  i32.const 1328
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6128
+  call $~lib/util/string/strtod
+  f64.const 1.e+23
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 38
+   i32.const 215
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 5
-  i32.const 1744
-  call $~lib/string/String#padStart
-  local.tee $53
-  i32.const 1840
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6160
+  call $~lib/util/string/strtod
+  f64.const 1e-23
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 39
+   i32.const 216
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 6
-  i32.const 1872
-  call $~lib/string/String#padStart
-  local.tee $54
-  i32.const 1904
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6192
+  call $~lib/util/string/strtod
+  f64.const 1.e+37
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1088
+   i32.const 217
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 6224
+  call $~lib/util/string/strtod
+  f64.const 1e-37
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 40
+   i32.const 218
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 8
-  i32.const 1872
-  call $~lib/string/String#padStart
-  local.tee $55
-  i32.const 1936
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6256
+  call $~lib/util/string/strtod
+  f64.const 1.e+38
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 41
+   i32.const 219
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const 1744
-  call $~lib/string/String#padEnd
-  local.tee $56
-  global.get $std/string/str
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6288
+  call $~lib/util/string/strtod
+  f64.const 1e-38
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 43
+   i32.const 220
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 15
-  i32.const 1744
-  call $~lib/string/String#padEnd
-  local.tee $57
-  global.get $std/string/str
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6320
+  call $~lib/util/string/strtod
+  f64.const 2.220446049250313e-16
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 44
+   i32.const 221
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 3
-  i32.const 1744
-  call $~lib/string/String#padEnd
-  local.tee $58
-  i32.const 1776
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6384
+  call $~lib/util/string/strtod
+  f64.const 1797693134862315708145274e284
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 45
+   i32.const 222
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 10
-  i32.const 1280
-  call $~lib/string/String#padEnd
-  local.tee $59
-  i32.const 1280
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6448
+  call $~lib/util/string/strtod
+  f64.const 5e-324
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 46
+   i32.const 223
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 100
-  i32.const 1280
-  call $~lib/string/String#padEnd
-  local.tee $60
-  i32.const 1328
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6480
+  call $~lib/util/string/strtod
+  f64.const 1.e+308
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 47
+   i32.const 224
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 5
-  i32.const 1744
-  call $~lib/string/String#padEnd
-  local.tee $61
-  i32.const 1968
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6528
+  call $~lib/util/string/strtod
+  f64.const 1
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 48
+   i32.const 225
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 6
-  i32.const 1808
-  call $~lib/string/String#padEnd
-  local.tee $62
-  i32.const 2000
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6672
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 49
+   i32.const 226
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 8
-  i32.const 1808
-  call $~lib/string/String#padEnd
-  local.tee $63
-  i32.const 2032
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 6704
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 50
+   i32.const 227
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 0
-  call $~lib/string/String#indexOf
+  i32.const 6736
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 52
+   i32.const 228
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1616
-  i32.const 0
-  call $~lib/string/String#indexOf
-  i32.const -1
-  i32.ne
+  i32.const 6768
+  call $~lib/util/string/strtod
+  f64.const -inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 53
+   i32.const 229
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 1328
-  i32.const 0
-  call $~lib/string/String#indexOf
+  i32.const 6800
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 54
+   i32.const 230
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  global.get $std/string/str
-  i32.const 0
-  call $~lib/string/String#indexOf
+  i32.const 6848
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 55
+   i32.const 231
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 1280
-  i32.const 0
-  call $~lib/string/String#indexOf
+  i32.const 6896
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 56
+   i32.const 232
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2064
-  i32.const 0
-  call $~lib/string/String#indexOf
-  i32.const 2
-  i32.ne
+  i32.const 6928
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 57
+   i32.const 233
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2096
-  i32.const 0
-  call $~lib/string/String#indexOf
-  i32.const -1
-  i32.ne
+  i32.const 6976
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 58
+   i32.const 234
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2064
-  i32.const 2
-  call $~lib/string/String#indexOf
-  i32.const 2
-  i32.ne
+  i32.const 7024
+  call $~lib/util/string/strtod
+  f64.const -inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 59
+   i32.const 235
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2064
-  i32.const 3
-  call $~lib/string/String#indexOf
-  i32.const -1
-  i32.ne
+  i32.const 7072
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 60
+   i32.const 236
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2128
-  i32.const -1
-  call $~lib/string/String#indexOf
-  i32.const 2
-  i32.ne
+  i32.const 7120
+  call $~lib/util/string/strtod
+  f64.const inf
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 61
+   i32.const 237
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 2147483647
-  call $~lib/string/String#lastIndexOf
+  i32.const 7168
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 63
+   i32.const 238
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1616
-  i32.const 2147483647
-  call $~lib/string/String#lastIndexOf
-  i32.const -1
-  i32.ne
+  i32.const 7200
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 64
+   i32.const 239
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 1280
-  i32.const 2147483647
-  call $~lib/string/String#lastIndexOf
-  global.get $std/string/str
-  call $~lib/string/String#get:length
-  i32.ne
+  i32.const 7232
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 65
+   i32.const 240
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2064
-  i32.const 2147483647
-  call $~lib/string/String#lastIndexOf
-  i32.const 2
-  i32.ne
+  i32.const 7264
+  call $~lib/util/string/strtod
+  f64.const 0
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 66
+   i32.const 244
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2096
-  i32.const 2147483647
-  call $~lib/string/String#lastIndexOf
-  i32.const -1
-  i32.ne
+  i32.const 7456
+  call $~lib/util/string/strtod
+  f64.const 1e-323
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 67
+   i32.const 257
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2160
-  i32.const 2147483647
-  call $~lib/string/String#lastIndexOf
-  i32.const 15
-  i32.ne
+  i32.const 7648
+  call $~lib/util/string/strtod
+  f64.const 2.225073858507202e-308
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 68
+   i32.const 261
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2064
-  i32.const 2
-  call $~lib/string/String#lastIndexOf
-  i32.const 2
-  i32.ne
+  i32.const 7840
+  i32.const 8000
+  call $~lib/string/String#concat
+  local.tee $3
+  i32.const 1648
+  local.get $3
+  select
+  i32.const 8160
+  call $~lib/string/String#concat
+  local.tee $5
+  i32.const 1648
+  local.get $5
+  select
+  i32.const 8320
+  call $~lib/string/String#concat
+  local.tee $42
+  i32.const 1648
+  local.get $42
+  select
+  i32.const 8480
+  call $~lib/string/String#concat
+  local.tee $75
+  call $~lib/util/string/strtod
+  f64.const 1797693134862315708145274e284
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 69
+   i32.const 264
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2064
-  i32.const 3
-  call $~lib/string/String#lastIndexOf
-  i32.const 2
-  i32.ne
+  i32.const 8640
+  call $~lib/util/string/strtod
+  f64.const 9.753531888799502e-104
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 70
+   i32.const 282
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2128
-  i32.const -1
-  call $~lib/string/String#lastIndexOf
-  i32.const -1
-  i32.ne
+  i32.const 8752
+  call $~lib/util/string/strtod
+  f64.const 0.5961860348131807
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 71
+   i32.const 283
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2192
-  i32.const 0
-  call $~lib/string/String#lastIndexOf
-  i32.const -1
-  i32.ne
+  i32.const 8864
+  call $~lib/util/string/strtod
+  f64.const 0.18150131692180388
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 72
+   i32.const 284
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 1616
-  i32.const 0
-  call $~lib/string/String#lastIndexOf
+  i32.const 8976
+  call $~lib/util/string/strtod
+  f64.const 0.42070823575344535
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 73
+   i32.const 285
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String#localeCompare
+  i32.const 9088
+  call $~lib/util/string/strtod
+  f64.const 0.6654686306516261
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 75
+   i32.const 286
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 1280
-  call $~lib/string/String#localeCompare
-  i32.const 1
-  i32.ne
+  i32.const 9200
+  call $~lib/util/string/strtod
+  f64.const 0.6101852922970868
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 76
+   i32.const 287
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1328
-  call $~lib/string/String#localeCompare
-  i32.const -1
-  i32.ne
+  i32.const 9312
+  call $~lib/util/string/strtod
+  f64.const 0.7696695208236968
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 77
+   i32.const 288
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1648
-  i32.const 1648
-  call $~lib/string/String#localeCompare
+  i32.const 9424
+  call $~lib/util/string/strtod
+  f64.const 0.25050653222286823
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 78
+   i32.const 289
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 2224
-  call $~lib/string/String#localeCompare
-  i32.const -1
-  i32.ne
+  i32.const 9536
+  call $~lib/util/string/strtod
+  f64.const 0.2740037230228005
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 79
+   i32.const 290
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2224
-  i32.const 1808
-  call $~lib/string/String#localeCompare
-  i32.const 1
-  i32.ne
+  i32.const 9648
+  call $~lib/util/string/strtod
+  f64.const 0.20723093500497428
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 80
+   i32.const 291
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2256
-  i32.const 1808
-  call $~lib/string/String#localeCompare
-  i32.const 1
-  i32.ne
+  i32.const 9760
+  call $~lib/util/string/strtod
+  f64.const 7.900280238081605
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 81
+   i32.const 292
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 2256
-  call $~lib/string/String#localeCompare
-  i32.const -1
-  i32.ne
+  i32.const 9872
+  call $~lib/util/string/strtod
+  f64.const 98.22860653737297
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 82
+   i32.const 293
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1776
-  call $~lib/string/String#localeCompare
-  i32.const -1
-  i32.ne
+  i32.const 9984
+  call $~lib/util/string/strtod
+  f64.const 746.894972319037
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 83
+   i32.const 294
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1296
-  i32.const 1280
-  call $~lib/string/String#localeCompare
-  i32.const 1
-  i32.ne
+  i32.const 10096
+  call $~lib/util/string/strtod
+  f64.const 1630.2683202827284
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 84
+   i32.const 295
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1280
-  call $~lib/string/String#trimStart
-  local.tee $64
-  i32.const 1280
-  call $~lib/string/String.__eq
-  i32.eqz
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 10208
+  call $~lib/util/string/strtod
+  f64.const 46371.68629719171
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 86
+   i32.const 296
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2288
-  call $~lib/string/String#trimStart
-  local.tee $65
-  i32.const 2288
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 10320
+  call $~lib/util/string/strtod
+  f64.const 653780.5944497711
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 87
+   i32.const 297
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2320
-  call $~lib/string/String#trimStart
-  local.tee $66
-  i32.const 2368
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 10432
+  call $~lib/util/string/strtod
+  f64.const 234632.43565024371
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 88
+   i32.const 298
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  call $~lib/string/String#trimEnd
-  local.tee $67
-  i32.const 1280
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 10544
+  call $~lib/util/string/strtod
+  f64.const 97094817.16420048
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 90
+   i32.const 299
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2288
-  call $~lib/string/String#trimEnd
-  local.tee $68
-  i32.const 2288
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 10656
+  call $~lib/util/string/strtod
+  f64.const 499690852.20518744
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 91
+   i32.const 300
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2320
-  call $~lib/string/String#trimEnd
-  local.tee $69
-  i32.const 2400
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 10768
+  call $~lib/util/string/strtod
+  f64.const 7925201200557245595648
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 92
+   i32.const 301
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  call $~lib/string/String#trim
-  local.tee $70
-  i32.const 1280
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 10880
+  call $~lib/util/string/strtod
+  f64.const 6096564585983177528398588e5
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 94
+   i32.const 302
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2288
-  call $~lib/string/String#trim
-  local.tee $71
-  i32.const 2288
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 10992
+  call $~lib/util/string/strtod
+  f64.const 4800416117477028695992383e42
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 95
+   i32.const 303
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2320
-  call $~lib/string/String#trim
-  local.tee $72
-  i32.const 1808
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 11104
+  call $~lib/util/string/strtod
+  f64.const 8524829079817968137287277e80
+  f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 96
+   i32.const 304
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2432
-  call $~lib/util/string/strtol<f64>
-  f64.const 0
+  i32.const 11216
+  call $~lib/util/string/strtod
+  f64.const 3271239291709782092398754e243
   f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 98
+   i32.const 305
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2464
-  call $~lib/util/string/strtol<f64>
-  f64.const 0
-  f64.ne
+  i32.const 11328
+  call $~lib/util/string/strtod
+  local.tee $2
+  local.get $2
+  f64.eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 99
+   i32.const 308
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2496
-  call $~lib/util/string/strtol<f64>
-  f64.const 1
+  i32.const 11360
+  call $~lib/util/string/strtod
+  f64.const 0.1
   f64.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 100
+   i32.const 309
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2528
-  call $~lib/util/string/strtol<f64>
-  f64.const 1
-  f64.ne
+  i32.const 1328
+  i32.const 11392
+  call $~lib/string/String#concat
+  local.tee $1
+  local.get $1
+  i32.const 11424
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 101
-   i32.const 1
+   i32.const 313
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2560
-  call $~lib/util/string/strtol<f64>
-  f64.const 5
-  f64.ne
+  i32.const 1328
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 102
-   i32.const 1
+   i32.const 314
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2592
-  call $~lib/util/string/strtol<f64>
-  f64.const 455
-  f64.ne
+  local.get $1
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 103
+   i32.const 316
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2624
-  call $~lib/util/string/strtol<f64>
-  f64.const 3855
-  f64.ne
+  i32.const 1280
+  i32.const 0
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 104
+   i32.const 317
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2656
-  call $~lib/util/string/strtol<f64>
-  f64.const 3855
-  f64.ne
+  i32.const 0
+  i32.const 1280
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 105
+   i32.const 318
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2688
-  call $~lib/util/string/strtol<f64>
-  f64.const 11
-  f64.ne
+  i32.const 1328
+  i32.const 11392
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 106
+   i32.const 319
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2720
-  call $~lib/util/string/strtol<f64>
-  f64.const 1
-  f64.ne
+  i32.const 1328
+  i32.const 1328
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 107
+   i32.const 320
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2752
-  call $~lib/util/string/strtol<f64>
-  f64.const -123
-  f64.ne
+  i32.const 11456
+  i32.const 11488
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 108
+   i32.const 321
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2784
-  call $~lib/util/string/strtol<f64>
-  f64.const 123
-  f64.ne
+  i32.const 11456
+  i32.const 11456
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 109
+   i32.const 322
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2816
-  call $~lib/util/string/strtol<f64>
-  f64.const -12
-  f64.ne
+  i32.const 11520
+  i32.const 11552
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 110
+   i32.const 323
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2848
-  call $~lib/util/string/strtol<f64>
-  f64.const 1
-  f64.ne
+  i32.const 11584
+  i32.const 11616
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 112
+   i32.const 324
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2880
-  call $~lib/util/string/strtol<f64>
-  f64.const 2
-  f64.ne
+  i32.const 11648
+  i32.const 11648
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 113
+   i32.const 325
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  call $~lib/util/string/strtol<i32>
-  i32.const 2147483647
-  i32.ne
+  i32.const 11648
+  i32.const 11680
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 115
+   i32.const 326
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  call $~lib/util/string/strtol<i64>
-  i64.const 9223372036854775807
-  i64.ne
+  i32.const 11712
+  i32.const 11760
+  call $~lib/string/String.__eq
   if
    i32.const 0
    i32.const 1088
-   i32.const 116
+   i32.const 327
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2432
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 11392
+  i32.const 1328
+  call $~lib/string/String.__gt
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 119
+   i32.const 329
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2496
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 11808
+  i32.const 1328
+  call $~lib/string/String.__gt
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 120
+   i32.const 330
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3200
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 11808
+  i32.const 11840
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 121
+   i32.const 331
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3232
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 11808
+  i32.const 11424
+  call $~lib/string/String.__gt
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 122
+   i32.const 332
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3264
-  call $~lib/util/string/strtod
-  f64.const 1e-05
-  f64.ne
+  i32.const 11808
+  i32.const 11424
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 123
+   i32.const 333
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3296
-  call $~lib/util/string/strtod
-  f64.const -1e-05
-  f64.ne
+  i32.const 11392
+  i32.const 0
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 124
+   i32.const 335
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3328
-  call $~lib/util/string/strtod
-  f64.const -3e-23
-  f64.ne
+  i32.const 0
+  i32.const 11392
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 125
+   i32.const 336
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3360
-  call $~lib/util/string/strtod
-  f64.const 3e21
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  call $~lib/string/String.__gt
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 126
+   i32.const 338
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3392
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  i32.const 1280
+  i32.const 1808
+  call $~lib/string/String.__lt
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 127
+   i32.const 339
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3424
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 128
+   i32.const 340
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3456
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  i32.const 1280
+  i32.const 1808
+  call $~lib/string/String.__gt
   if
    i32.const 0
    i32.const 1088
-   i32.const 129
+   i32.const 341
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3488
-  call $~lib/util/string/strtod
-  f64.const 0.25
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 130
+   i32.const 342
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3520
-  call $~lib/util/string/strtod
-  f64.const 1e3
-  f64.ne
+  i32.const 1280
+  i32.const 1808
+  call $~lib/string/String.__gt
   if
    i32.const 0
    i32.const 1088
-   i32.const 131
+   i32.const 343
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3552
-  call $~lib/util/string/strtod
-  f64.const 1e-10
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 132
+   i32.const 344
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3584
-  call $~lib/util/string/strtod
-  f64.const 1e-30
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String.__gt
   if
    i32.const 0
    i32.const 1088
-   i32.const 133
+   i32.const 345
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3616
-  call $~lib/util/string/strtod
-  f64.const 1e-323
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String.__lt
   if
    i32.const 0
    i32.const 1088
-   i32.const 134
+   i32.const 346
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3648
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String.__gt
   if
    i32.const 0
    i32.const 1088
-   i32.const 135
+   i32.const 347
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3680
-  call $~lib/util/string/strtod
-  f64.const 1.e+308
-  f64.ne
+  i32.const 65377
+  call $~lib/string/String.fromCodePoint
+  local.tee $0
+  i32.const 55296
+  call $~lib/string/String.fromCodePoint
+  local.tee $1
+  i32.const 1648
+  local.get $1
+  select
+  i32.const 56322
+  call $~lib/string/String.fromCodePoint
+  local.tee $4
+  call $~lib/string/String#concat
+  local.tee $6
+  call $~lib/string/String.__gt
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 136
-   i32.const 1
+   i32.const 352
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3712
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  local.get $0
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $4
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $6
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  i32.const 1868
+  i32.load
+  i32.const 1
+  i32.shr_u
+  i32.const 3
+  i32.ne
   if
    i32.const 0
    i32.const 1088
-   i32.const 137
+   i32.const 355
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
   i32.const 1280
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  i32.const 100
+  call $~lib/string/String#repeat
+  local.tee $6
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 138
+   i32.const 357
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3744
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  i32.const 1328
+  i32.const 0
+  call $~lib/string/String#repeat
+  local.tee $76
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 141
+   i32.const 358
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3776
-  call $~lib/util/string/strtod
-  f64.const 1e-10
-  f64.ne
+  i32.const 1328
+  i32.const 1
+  call $~lib/string/String#repeat
+  local.tee $77
+  i32.const 1328
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 142
+   i32.const 359
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3824
-  call $~lib/util/string/strtod
-  f64.const 10
-  f64.ne
+  i32.const 1328
+  i32.const 2
+  call $~lib/string/String#repeat
+  local.tee $78
+  i32.const 11840
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 143
+   i32.const 360
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3856
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 1328
+  i32.const 3
+  call $~lib/string/String#repeat
+  local.tee $79
+  i32.const 11920
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 144
+   i32.const 361
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3888
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 11424
+  i32.const 4
+  call $~lib/string/String#repeat
+  local.tee $80
+  i32.const 11952
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 145
+   i32.const 362
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3920
-  call $~lib/util/string/strtod
-  f64.const 10
-  f64.ne
+  i32.const 1328
+  i32.const 5
+  call $~lib/string/String#repeat
+  local.tee $81
+  i32.const 11984
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 146
+   i32.const 363
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 3968
-  call $~lib/util/string/strtod
-  f64.const 123456789
-  f64.ne
+  i32.const 1328
+  i32.const 6
+  call $~lib/string/String#repeat
+  local.tee $82
+  i32.const 12016
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 147
+   i32.const 364
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4016
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 1328
+  i32.const 7
+  call $~lib/string/String#repeat
+  local.tee $83
+  i32.const 12048
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 148
+   i32.const 365
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4064
-  call $~lib/util/string/strtod
-  f64.const 1e-60
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String#replace
+  local.tee $84
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 150
+   i32.const 367
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4096
-  call $~lib/util/string/strtod
-  f64.const 1.e+60
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  i32.const 5552
+  call $~lib/string/String#replace
+  local.tee $85
+  i32.const 5552
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 151
+   i32.const 368
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4128
-  call $~lib/util/string/strtod
-  f64.const -0
-  f64.ne
+  i32.const 5552
+  i32.const 5552
+  i32.const 1280
+  call $~lib/string/String#replace
+  local.tee $86
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 154
+   i32.const 369
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4160
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 5552
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String#replace
+  local.tee $87
+  i32.const 5552
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 155
+   i32.const 370
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4192
-  call $~lib/util/string/strtod
-  f64.const -1.1
-  f64.ne
+  i32.const 1808
+  i32.const 5584
+  i32.const 5552
+  call $~lib/string/String#replace
+  local.tee $88
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 156
+   i32.const 371
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4240
-  call $~lib/util/string/strtod
-  f64.const 10
-  f64.ne
+  i32.const 1808
+  i32.const 1808
+  i32.const 5552
+  call $~lib/string/String#replace
+  local.tee $89
+  i32.const 5552
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 157
+   i32.const 372
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4288
-  call $~lib/util/string/strtod
-  f64.const 10
-  f64.ne
+  i32.const 1808
+  i32.const 2256
+  i32.const 5552
+  call $~lib/string/String#replace
+  local.tee $90
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 158
+   i32.const 373
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4336
-  call $~lib/util/string/strtod
-  f64.const 0.022
-  f64.ne
+  i32.const 1808
+  i32.const 11424
+  i32.const 11424
+  call $~lib/string/String#replace
+  local.tee $91
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 159
+   i32.const 374
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4368
-  call $~lib/util/string/strtod
-  f64.const 11
-  f64.ne
+  i32.const 12080
+  i32.const 5584
+  i32.const 5552
+  call $~lib/string/String#replace
+  local.tee $92
+  i32.const 12112
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 160
+   i32.const 375
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4400
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const 5552
+  call $~lib/string/String#replace
+  local.tee $93
+  i32.const 12144
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 161
+   i32.const 376
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4432
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 12176
+  i32.const 12208
+  i32.const 5552
+  call $~lib/string/String#replace
+  local.tee $94
+  i32.const 12144
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 162
+   i32.const 377
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4464
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 1808
+  i32.const 12240
+  i32.const 12272
+  call $~lib/string/String#replace
+  local.tee $95
+  i32.const 12304
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 163
+   i32.const 378
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4496
-  call $~lib/util/string/strtod
-  f64.const 1.1
-  f64.ne
+  i32.const 1808
+  i32.const 12240
+  i32.const 1280
+  call $~lib/string/String#replace
+  local.tee $96
+  i32.const 11424
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 164
+   i32.const 379
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4528
-  call $~lib/util/string/strtod
-  f64.const -1.1
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  i32.const 1808
+  call $~lib/string/String#replaceAll
+  local.tee $97
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 165
+   i32.const 381
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4560
-  call $~lib/util/string/strtod
-  f64.const -1.1
-  f64.ne
+  i32.const 1808
+  i32.const 5584
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $98
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 166
+   i32.const 382
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4592
-  call $~lib/util/string/strtod
-  f64.const -1.1
-  f64.ne
+  i32.const 2000
+  i32.const 1808
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $99
+  i32.const 12272
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 167
+   i32.const 384
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4624
-  call $~lib/util/string/strtod
-  f64.const -1.1
-  f64.ne
+  i32.const 12336
+  i32.const 1808
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $100
+  i32.const 12384
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 168
+   i32.const 385
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4656
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 2000
+  i32.const 11424
+  i32.const 11424
+  call $~lib/string/String#replaceAll
+  local.tee $101
+  i32.const 2000
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 169
+   i32.const 386
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4688
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 12416
+  i32.const 1328
+  i32.const 12384
+  call $~lib/string/String#replaceAll
+  local.tee $102
+  i32.const 12448
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 170
+   i32.const 387
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4720
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 2000
+  i32.const 11424
+  i32.const 12272
+  call $~lib/string/String#replaceAll
+  local.tee $103
+  i32.const 12496
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 171
+   i32.const 388
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4752
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 12528
+  i32.const 12560
+  i32.const 12272
+  call $~lib/string/String#replaceAll
+  local.tee $104
+  i32.const 12592
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 172
+   i32.const 389
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4784
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 1808
+  i32.const 2256
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $105
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 173
+   i32.const 390
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4816
-  call $~lib/util/string/strtod
-  f64.const 10
-  f64.ne
+  i32.const 2256
+  i32.const 12624
+  i32.const 12272
+  call $~lib/string/String#replaceAll
+  local.tee $106
+  i32.const 2256
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 174
+   i32.const 391
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4848
-  call $~lib/util/string/strtod
-  f64.const 10
-  f64.ne
+  i32.const 1808
+  i32.const 12656
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $107
+  i32.const 12688
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 175
+   i32.const 392
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4880
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 11424
+  i32.const 11424
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $108
+  i32.const 5552
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 176
+   i32.const 393
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4912
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 12080
+  i32.const 5584
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $109
+  i32.const 12720
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 177
+   i32.const 394
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4944
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String#replaceAll
+  local.tee $110
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 178
+   i32.const 396
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 4976
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $111
+  i32.const 5552
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 179
+   i32.const 397
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5008
-  call $~lib/util/string/strtod
-  f64.const 10
-  f64.ne
+  i32.const 5552
+  i32.const 5552
+  i32.const 1280
+  call $~lib/string/String#replaceAll
+  local.tee $112
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 180
+   i32.const 398
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5040
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  i32.const 5552
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String#replaceAll
+  local.tee $113
+  i32.const 5552
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 181
+   i32.const 399
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5072
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  i32.const 1808
+  i32.const 1808
+  i32.const 5584
+  call $~lib/string/String#replaceAll
+  local.tee $114
+  i32.const 5584
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 182
+   i32.const 400
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5104
-  call $~lib/util/string/strtod
-  f64.const 0.01
-  f64.ne
+  i32.const 1808
+  i32.const 2224
+  i32.const 5584
+  call $~lib/string/String#replaceAll
+  local.tee $115
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 183
+   i32.const 401
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5136
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const 5552
+  call $~lib/string/String#replaceAll
+  local.tee $116
+  i32.const 12752
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 184
+   i32.const 402
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5168
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const 1280
+  call $~lib/string/String#replaceAll
+  local.tee $117
+  i32.const 1808
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 185
+   i32.const 403
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5200
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  global.get $std/string/str
+  local.tee $1
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 186
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 5232
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  i32.const 12784
+  global.set $std/string/str
+  i32.const 12784
+  i32.const 0
+  i32.const 2147483647
+  call $~lib/string/String#slice
+  local.tee $118
+  i32.const 12784
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 187
+   i32.const 407
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5264
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  global.get $std/string/str
+  i32.const -1
+  i32.const 2147483647
+  call $~lib/string/String#slice
+  local.tee $119
+  i32.const 12832
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 188
+   i32.const 408
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5296
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  global.get $std/string/str
+  i32.const -5
+  i32.const 2147483647
+  call $~lib/string/String#slice
+  local.tee $120
+  i32.const 12864
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 189
+   i32.const 409
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5328
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  global.get $std/string/str
+  i32.const 2
+  i32.const 7
+  call $~lib/string/String#slice
+  local.tee $121
+  i32.const 12896
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 190
+   i32.const 410
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5360
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  global.get $std/string/str
+  i32.const -11
+  i32.const -6
+  call $~lib/string/String#slice
+  local.tee $122
+  i32.const 12928
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 191
+   i32.const 411
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5392
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  global.get $std/string/str
+  i32.const 4
+  i32.const 3
+  call $~lib/string/String#slice
+  local.tee $123
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 192
+   i32.const 412
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5424
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  global.get $std/string/str
+  i32.const 0
+  i32.const -1
+  call $~lib/string/String#slice
+  local.tee $124
+  i32.const 12960
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 193
+   i32.const 413
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5456
-  call $~lib/util/string/strtod
-  f64.const -0
-  f64.ne
+  global.get $std/string/str
+  i32.const 0
+  i32.const 2147483647
+  call $~lib/string/String#substr
+  local.tee $125
+  i32.const 12784
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 194
+   i32.const 415
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5488
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  global.get $std/string/str
+  i32.const -1
+  i32.const 2147483647
+  call $~lib/string/String#substr
+  local.tee $126
+  i32.const 12832
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 195
+   i32.const 416
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5520
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  global.get $std/string/str
+  i32.const -5
+  i32.const 2147483647
+  call $~lib/string/String#substr
+  local.tee $127
+  i32.const 12864
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 196
+   i32.const 417
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5552
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 2
+  i32.const 7
+  call $~lib/string/String#substr
+  local.tee $128
+  i32.const 13008
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 197
+   i32.const 418
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5584
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const -11
+  i32.const -6
+  call $~lib/string/String#substr
+  local.tee $129
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 198
+   i32.const 419
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5616
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 4
+  i32.const 3
+  call $~lib/string/String#substr
+  local.tee $130
+  i32.const 13040
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 199
+   i32.const 420
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5648
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 0
+  i32.const -1
+  call $~lib/string/String#substr
+  local.tee $131
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 200
+   i32.const 421
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5680
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 0
+  i32.const 100
+  call $~lib/string/String#substr
+  local.tee $132
+  i32.const 12784
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 201
+   i32.const 422
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5712
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 4
+  i32.const 4
+  call $~lib/string/String#substr
+  local.tee $133
+  i32.const 13072
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 202
+   i32.const 423
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5744
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 4
+  i32.const -3
+  call $~lib/string/String#substr
+  local.tee $134
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 203
+   i32.const 424
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5776
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 0
+  i32.const 2147483647
+  call $~lib/string/String#substring
+  local.tee $135
+  i32.const 12784
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 204
+   i32.const 426
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5808
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const -1
+  i32.const 2147483647
+  call $~lib/string/String#substring
+  local.tee $136
+  i32.const 12784
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 205
+   i32.const 427
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5840
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const -5
+  i32.const 2147483647
+  call $~lib/string/String#substring
+  local.tee $137
+  i32.const 12784
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 206
+   i32.const 428
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5872
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 2
+  i32.const 7
+  call $~lib/string/String#substring
+  local.tee $138
+  i32.const 12896
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 207
+   i32.const 429
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5904
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const -11
+  i32.const -6
+  call $~lib/string/String#substring
+  local.tee $139
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 208
+   i32.const 430
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5936
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 4
+  i32.const 3
+  call $~lib/string/String#substring
+  local.tee $140
+  i32.const 13104
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 209
+   i32.const 431
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5968
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 0
+  i32.const -1
+  call $~lib/string/String#substring
+  local.tee $141
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 210
+   i32.const 432
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6000
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 0
+  i32.const 100
+  call $~lib/string/String#substring
+  local.tee $142
+  i32.const 12784
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 211
+   i32.const 433
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6032
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  global.get $std/string/str
+  i32.const 4
+  i32.const 4
+  call $~lib/string/String#substring
+  local.tee $143
+  i32.const 1280
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 212
+   i32.const 434
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6064
-  call $~lib/util/string/strtod
-  f64.const 1e22
-  f64.ne
+  global.get $std/string/str
+  i32.const 4
+  i32.const -3
+  call $~lib/string/String#substring
+  local.tee $144
+  i32.const 2256
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 213
+   i32.const 435
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6096
-  call $~lib/util/string/strtod
-  f64.const 1e-22
-  f64.ne
+  i32.const 1280
+  i32.const 0
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.tee $1
+  i32.load offset=12
+  i32.const 1
+  i32.eq
+  if
+   local.get $1
+   i32.const 0
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1280
+   call $~lib/string/String.__eq
+   local.set $7
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $7
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 214
-   i32.const 1
+   i32.const 441
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6128
-  call $~lib/util/string/strtod
-  f64.const 1.e+23
-  f64.ne
+  i32.const 1280
+  i32.const 1280
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $0
+  local.get $1
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 215
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 6160
-  call $~lib/util/string/strtod
-  f64.const 1e-23
-  f64.ne
+  local.get $0
+  i32.load offset=12
   if
    i32.const 0
    i32.const 1088
-   i32.const 216
-   i32.const 1
+   i32.const 443
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6192
-  call $~lib/util/string/strtod
-  f64.const 1.e+37
-  f64.ne
+  i32.const 1280
+  i32.const 2064
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $1
+  local.get $0
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.load offset=12
+  i32.const 1
+  i32.eq
   if
+   local.get $1
    i32.const 0
-   i32.const 1088
-   i32.const 217
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1280
+   call $~lib/string/String.__eq
+   local.set $8
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6224
-  call $~lib/util/string/strtod
-  f64.const 1e-37
-  f64.ne
+  local.get $8
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 218
-   i32.const 1
+   i32.const 445
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6256
-  call $~lib/util/string/strtod
-  f64.const 1.e+38
-  f64.ne
+  i32.const 13360
+  i32.const 5744
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $0
+  local.get $1
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.load offset=12
+  i32.const 1
+  i32.eq
   if
+   local.get $0
    i32.const 0
-   i32.const 1088
-   i32.const 219
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 13360
+   call $~lib/string/String.__eq
+   local.set $9
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6288
-  call $~lib/util/string/strtod
-  f64.const 1e-38
-  f64.ne
+  local.get $9
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 220
-   i32.const 1
+   i32.const 447
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6320
-  call $~lib/util/string/strtod
-  f64.const 2.220446049250313e-16
-  f64.ne
+  i32.const 13360
+  i32.const 2064
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $1
+  local.get $0
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.load offset=12
+  i32.const 3
+  i32.eq
   if
+   local.get $1
    i32.const 0
-   i32.const 1088
-   i32.const 221
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $10
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $10
+  if
+   local.get $1
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $11
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6384
-  call $~lib/util/string/strtod
-  f64.const 1797693134862315708145274e284
-  f64.ne
+  local.get $11
+  if
+   local.get $1
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $12
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $12
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 222
-   i32.const 1
+   i32.const 449
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6448
-  call $~lib/util/string/strtod
-  f64.const 5e-324
-  f64.ne
+  i32.const 13392
+  i32.const 13424
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $0
+  local.get $1
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.load offset=12
+  i32.const 3
+  i32.eq
+  if
+   local.get $0
+   i32.const 0
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $13
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $13
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 223
+   local.get $0
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $14
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6480
-  call $~lib/util/string/strtod
-  f64.const 1.e+308
-  f64.ne
+  local.get $14
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 224
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $15
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6528
-  call $~lib/util/string/strtod
-  f64.const 1
-  f64.ne
+  local.get $15
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 225
-   i32.const 1
+   i32.const 451
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6672
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  i32.const 13456
+  i32.const 2064
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $1
+  local.get $0
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 226
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 6704
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  local.get $1
+  i32.load offset=12
+  i32.const 4
+  i32.eq
   if
+   local.get $1
    i32.const 0
-   i32.const 1088
-   i32.const 227
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $16
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6736
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  local.get $16
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 228
+   local.get $1
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $17
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6768
-  call $~lib/util/string/strtod
-  f64.const -inf
-  f64.ne
+  local.get $17
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 229
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1280
+   call $~lib/string/String.__eq
+   local.set $18
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6800
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  local.get $18
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 230
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 3
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $19
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6848
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  local.get $19
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 231
-   i32.const 1
+   i32.const 453
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 6896
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  i32.const 13488
+  i32.const 2064
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $0
+  local.get $1
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 232
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 6928
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  local.get $0
+  i32.load offset=12
+  i32.const 4
+  i32.eq
   if
+   local.get $0
    i32.const 0
-   i32.const 1088
-   i32.const 233
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 1280
+   call $~lib/string/String.__eq
+   local.set $20
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 6976
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  local.get $20
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 234
+   local.get $0
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $21
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 7024
-  call $~lib/util/string/strtod
-  f64.const -inf
-  f64.ne
+  local.get $21
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 235
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $22
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 7072
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  local.get $22
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 236
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 3
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $23
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 7120
-  call $~lib/util/string/strtod
-  f64.const inf
-  f64.ne
+  local.get $23
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 237
-   i32.const 1
+   i32.const 455
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 7168
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  i32.const 13520
+  i32.const 2064
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $1
+  local.get $0
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 238
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 7200
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  local.get $1
+  i32.load offset=12
+  i32.const 4
+  i32.eq
   if
+   local.get $1
    i32.const 0
-   i32.const 1088
-   i32.const 239
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $24
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 7232
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  local.get $24
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 240
+   local.get $1
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $25
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 7264
-  call $~lib/util/string/strtod
-  f64.const 0
-  f64.ne
+  local.get $25
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 244
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $26
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 7456
-  call $~lib/util/string/strtod
-  f64.const 1e-323
-  f64.ne
+  local.get $26
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 257
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 3
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1280
+   call $~lib/string/String.__eq
+   local.set $27
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 7648
-  call $~lib/util/string/strtod
-  f64.const 2.225073858507202e-308
-  f64.ne
+  local.get $27
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 261
-   i32.const 1
+   i32.const 457
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 7840
-  i32.const 8000
-  call $~lib/string/String.__concat
-  local.tee $73
-  i32.const 8160
-  call $~lib/string/String.__concat
-  local.tee $74
-  i32.const 8320
-  call $~lib/string/String.__concat
-  local.tee $75
-  i32.const 8480
-  call $~lib/string/String.__concat
-  local.tee $76
-  call $~lib/util/string/strtod
-  f64.const 1797693134862315708145274e284
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const 2147483647
+  call $~lib/string/String#split
+  local.set $0
+  local.get $1
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 264
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 8640
-  call $~lib/util/string/strtod
-  f64.const 9.753531888799502e-104
-  f64.ne
+  local.get $0
+  i32.load offset=12
+  i32.const 3
+  i32.eq
   if
+   local.get $0
    i32.const 0
-   i32.const 1088
-   i32.const 282
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 8752
-  call $~lib/util/string/strtod
-  f64.const 0.5961860348131807
-  f64.ne
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $28
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+  end
+  local.get $28
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 283
+   local.get $0
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $29
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 8864
-  call $~lib/util/string/strtod
-  f64.const 0.18150131692180388
-  f64.ne
+  local.get $29
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 284
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $30
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 8976
-  call $~lib/util/string/strtod
-  f64.const 0.42070823575344535
-  f64.ne
+  local.get $30
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 285
-   i32.const 1
+   i32.const 459
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 9088
-  call $~lib/util/string/strtod
-  f64.const 0.6654686306516261
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const 0
+  call $~lib/string/String#split
+  local.set $4
+  local.get $0
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 286
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 9200
-  call $~lib/util/string/strtod
-  f64.const 0.6101852922970868
-  f64.ne
+  local.get $4
+  i32.load offset=12
   if
    i32.const 0
    i32.const 1088
-   i32.const 287
-   i32.const 1
+   i32.const 461
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 9312
-  call $~lib/util/string/strtod
-  f64.const 0.7696695208236968
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const 1
+  call $~lib/string/String#split
+  local.set $1
+  local.get $4
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 288
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 9424
-  call $~lib/util/string/strtod
-  f64.const 0.25050653222286823
-  f64.ne
+  local.get $1
+  i32.load offset=12
+  i32.const 1
+  i32.eq
   if
+   local.get $1
    i32.const 0
-   i32.const 1088
-   i32.const 289
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $31
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 9536
-  call $~lib/util/string/strtod
-  f64.const 0.2740037230228005
-  f64.ne
+  local.get $31
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 290
-   i32.const 1
+   i32.const 463
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 9648
-  call $~lib/util/string/strtod
-  f64.const 0.20723093500497428
-  f64.ne
+  i32.const 13360
+  i32.const 2064
+  i32.const 1
+  call $~lib/string/String#split
+  local.set $0
+  local.get $1
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 291
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 9760
-  call $~lib/util/string/strtod
-  f64.const 7.900280238081605
-  f64.ne
+  local.get $0
+  i32.load offset=12
+  i32.const 1
+  i32.eq
   if
+   local.get $0
    i32.const 0
-   i32.const 1088
-   i32.const 292
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $32
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 9872
-  call $~lib/util/string/strtod
-  f64.const 98.22860653737297
-  f64.ne
+  local.get $32
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 293
-   i32.const 1
+   i32.const 465
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 9984
-  call $~lib/util/string/strtod
-  f64.const 746.894972319037
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const 4
+  call $~lib/string/String#split
+  local.set $1
+  local.get $0
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 294
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 10096
-  call $~lib/util/string/strtod
-  f64.const 1630.2683202827284
-  f64.ne
+  local.get $1
+  i32.load offset=12
+  i32.const 3
+  i32.eq
   if
+   local.get $1
    i32.const 0
-   i32.const 1088
-   i32.const 295
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $33
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 10208
-  call $~lib/util/string/strtod
-  f64.const 46371.68629719171
-  f64.ne
+  local.get $33
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 296
+   local.get $1
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $34
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 10320
-  call $~lib/util/string/strtod
-  f64.const 653780.5944497711
-  f64.ne
+  local.get $34
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 297
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $35
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 10432
-  call $~lib/util/string/strtod
-  f64.const 234632.43565024371
-  f64.ne
+  local.get $35
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 298
-   i32.const 1
+   i32.const 467
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 10544
-  call $~lib/util/string/strtod
-  f64.const 97094817.16420048
-  f64.ne
+  i32.const 1808
+  i32.const 1280
+  i32.const -1
+  call $~lib/string/String#split
+  local.set $0
+  local.get $1
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 299
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 10656
-  call $~lib/util/string/strtod
-  f64.const 499690852.20518744
-  f64.ne
+  local.get $0
+  i32.load offset=12
+  i32.const 3
+  i32.eq
   if
+   local.get $0
    i32.const 0
-   i32.const 1088
-   i32.const 300
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $36
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 10768
-  call $~lib/util/string/strtod
-  f64.const 7925201200557245595648
-  f64.ne
+  local.get $36
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 301
+   local.get $0
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $37
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 10880
-  call $~lib/util/string/strtod
-  f64.const 6096564585983177528398588e5
-  f64.ne
+  local.get $37
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 302
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $1
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $38
+   local.get $1
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 10992
-  call $~lib/util/string/strtod
-  f64.const 4800416117477028695992383e42
-  f64.ne
+  local.get $38
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 303
-   i32.const 1
+   i32.const 469
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11104
-  call $~lib/util/string/strtod
-  f64.const 8524829079817968137287277e80
-  f64.ne
+  i32.const 13360
+  i32.const 2064
+  i32.const -1
+  call $~lib/string/String#split
+  local.set $1
+  local.get $0
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 304
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 11216
-  call $~lib/util/string/strtod
-  f64.const 3271239291709782092398754e243
-  f64.ne
+  local.get $1
+  i32.load offset=12
+  i32.const 3
+  i32.eq
   if
+   local.get $1
    i32.const 0
-   i32.const 1088
-   i32.const 305
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 1328
+   call $~lib/string/String.__eq
+   local.set $39
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 11328
-  call $~lib/util/string/strtod
-  local.tee $2
-  local.get $2
-  f64.eq
+  local.get $39
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 308
+   local.get $1
    i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 11392
+   call $~lib/string/String.__eq
+   local.set $40
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 11360
-  call $~lib/util/string/strtod
-  f64.const 0.1
-  f64.ne
+  local.get $40
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 309
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 2
+   call $~lib/array/Array<~lib/string/String>#__get
+   local.tee $0
+   i32.const 12240
+   call $~lib/string/String.__eq
+   local.set $41
+   local.get $0
+   i32.const 17912
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
-  i32.const 1328
-  i32.const 11392
-  call $~lib/string/String.__concat
-  local.tee $1
-  local.get $1
-  i32.const 11424
-  call $~lib/string/String.__eq
+  local.get $41
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 313
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1328
-  call $~lib/string/String.__eq
-  if
-   i32.const 0
-   i32.const 1088
-   i32.const 314
+   i32.const 471
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String.__eq
-  i32.eqz
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 316
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1280
   i32.const 0
+  call $~lib/util/number/itoa32
+  local.tee $1
+  i32.const 2432
   call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 317
+   i32.const 474
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 0
-  i32.const 1280
+  i32.const 1
+  call $~lib/util/number/itoa32
+  local.tee $0
+  i32.const 2496
   call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 318
+   i32.const 475
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 11392
+  i32.const 8
+  call $~lib/util/number/itoa32
+  local.tee $4
+  i32.const 13552
   call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 319
+   i32.const 476
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 1328
+  i32.const 12
+  call $~lib/util/number/itoa32
+  local.tee $7
+  i32.const 13584
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 320
+   i32.const 477
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11456
-  i32.const 11488
+  i32.const 123
+  call $~lib/util/number/itoa32
+  local.tee $8
+  i32.const 1872
   call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 321
+   i32.const 478
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11456
-  i32.const 11456
+  i32.const -1000
+  call $~lib/util/number/itoa32
+  local.tee $9
+  i32.const 13616
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 322
+   i32.const 479
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11520
-  i32.const 11552
+  i32.const 1234
+  call $~lib/util/number/itoa32
+  local.tee $10
+  i32.const 13648
   call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 323
+   i32.const 480
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11584
-  i32.const 11616
+  i32.const 12345
+  call $~lib/util/number/itoa32
+  local.tee $11
+  i32.const 13680
   call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 324
+   i32.const 481
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11648
-  i32.const 11648
+  i32.const 123456
+  call $~lib/util/number/itoa32
+  local.tee $12
+  i32.const 13712
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 325
+   i32.const 482
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11648
-  i32.const 11680
+  i32.const 1111111
+  call $~lib/util/number/itoa32
+  local.tee $13
+  i32.const 13744
   call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 326
+   i32.const 483
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11712
-  i32.const 11760
+  i32.const 1234567
+  call $~lib/util/number/itoa32
+  local.tee $14
+  i32.const 13776
   call $~lib/string/String.__eq
-  if
-   i32.const 0
-   i32.const 1088
-   i32.const 327
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 11392
-  i32.const 1328
-  call $~lib/string/String.__gt
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 329
+   i32.const 484
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11808
-  i32.const 1328
-  call $~lib/string/String.__gt
+  i32.const 12345678
+  call $~lib/util/number/itoa32
+  local.tee $15
+  i32.const 13808
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 330
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 11808
-  i32.const 11840
-  call $~lib/string/String.__lt
-  if
-   i32.const 0
-   i32.const 1088
-   i32.const 331
+   i32.const 485
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11808
-  i32.const 11424
-  call $~lib/string/String.__gt
+  i32.const 123456789
+  call $~lib/util/number/itoa32
+  local.tee $16
+  i32.const 13840
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 332
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 11808
-  i32.const 11424
-  call $~lib/string/String.__lt
-  if
-   i32.const 0
-   i32.const 1088
-   i32.const 333
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 11392
-  i32.const 0
-  call $~lib/string/String.__lt
-  if
-   i32.const 0
-   i32.const 1088
-   i32.const 335
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  i32.const 11392
-  call $~lib/string/String.__lt
-  if
-   i32.const 0
-   i32.const 1088
-   i32.const 336
+   i32.const 486
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 1280
-  call $~lib/string/String.__gt
+  i32.const 2147483646
+  call $~lib/util/number/itoa32
+  local.tee $17
+  i32.const 13888
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 338
+   i32.const 487
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1808
-  call $~lib/string/String.__lt
+  i32.const 2147483647
+  call $~lib/util/number/itoa32
+  local.tee $18
+  i32.const 13936
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 339
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1808
-  i32.const 1280
-  call $~lib/string/String.__lt
-  if
-   i32.const 0
-   i32.const 1088
-   i32.const 340
+   i32.const 488
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1808
-  call $~lib/string/String.__gt
+  i32.const -2147483648
+  call $~lib/util/number/itoa32
+  local.tee $19
+  i32.const 13984
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 341
+   i32.const 489
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 1280
-  call $~lib/string/String.__lt
+  i32.const -1
+  call $~lib/util/number/itoa32
+  local.tee $20
+  i32.const 14032
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 342
+   i32.const 490
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1808
-  call $~lib/string/String.__gt
+  i32.const 0
+  call $~lib/util/number/utoa32
+  local.tee $21
+  i32.const 2432
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 343
+   i32.const 492
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String.__lt
+  i32.const 1000
+  call $~lib/util/number/utoa32
+  local.tee $22
+  i32.const 14064
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 344
+   i32.const 493
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String.__gt
+  i32.const 2147483647
+  call $~lib/util/number/utoa32
+  local.tee $23
+  i32.const 13936
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 345
+   i32.const 494
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String.__lt
+  i32.const -2147483648
+  call $~lib/util/number/utoa32
+  local.tee $24
+  i32.const 14096
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 346
+   i32.const 495
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String.__gt
+  i32.const -1
+  call $~lib/util/number/utoa32
+  local.tee $25
+  i32.const 14144
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 347
+   i32.const 496
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 65377
-  call $~lib/string/String.fromCodePoint
-  local.tee $11
-  i32.const 55296
-  call $~lib/string/String.fromCodePoint
-  local.tee $8
-  i32.const 56322
-  call $~lib/string/String.fromCodePoint
-  local.tee $1
-  call $~lib/string/String.__concat
-  local.tee $0
-  call $~lib/string/String.__gt
+  i64.const 0
+  call $~lib/util/number/utoa64
+  local.tee $26
+  i32.const 2432
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 352
-   i32.const 3
+   i32.const 498
+   i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $11
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
-  i32.const 1872
-  call $~lib/string/String#get:length
-  i32.const 3
-  i32.ne
+  i64.const 12
+  call $~lib/util/number/utoa64
+  local.tee $27
+  i32.const 13584
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 355
+   i32.const 499
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 100
-  call $~lib/string/String#repeat
-  local.tee $77
-  i32.const 1280
+  i64.const 123
+  call $~lib/util/number/utoa64
+  local.tee $28
+  i32.const 1872
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 357
+   i32.const 500
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 0
-  call $~lib/string/String#repeat
-  local.tee $78
-  i32.const 1280
+  i64.const 1234
+  call $~lib/util/number/utoa64
+  local.tee $29
+  i32.const 13648
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 358
+   i32.const 501
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 1
-  call $~lib/string/String#repeat
-  local.tee $79
-  i32.const 1328
+  i64.const 12345
+  call $~lib/util/number/utoa64
+  local.tee $30
+  i32.const 13680
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 359
+   i32.const 502
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 2
-  call $~lib/string/String#repeat
-  local.tee $80
-  i32.const 11840
+  i64.const 123456
+  call $~lib/util/number/utoa64
+  local.tee $31
+  i32.const 13712
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 360
+   i32.const 503
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 3
-  call $~lib/string/String#repeat
-  local.tee $81
-  i32.const 11920
+  i64.const 1234567
+  call $~lib/util/number/utoa64
+  local.tee $32
+  i32.const 13776
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 361
+   i32.const 504
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11424
-  i32.const 4
-  call $~lib/string/String#repeat
-  local.tee $82
-  i32.const 11952
+  i64.const 99999999
+  call $~lib/util/number/utoa64
+  local.tee $33
+  i32.const 14192
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 362
+   i32.const 505
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 5
-  call $~lib/string/String#repeat
-  local.tee $83
-  i32.const 11984
+  i64.const 100000000
+  call $~lib/util/number/utoa64
+  local.tee $34
+  i32.const 14224
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 363
+   i32.const 506
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 6
-  call $~lib/string/String#repeat
-  local.tee $84
-  i32.const 12016
+  i64.const 4294967295
+  call $~lib/util/number/utoa64
+  local.tee $35
+  i32.const 14144
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 364
+   i32.const 507
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1328
-  i32.const 7
-  call $~lib/string/String#repeat
-  local.tee $85
-  i32.const 12048
+  i64.const 4294967297
+  call $~lib/util/number/utoa64
+  local.tee $36
+  i32.const 14272
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 365
+   i32.const 508
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String#replace
-  local.tee $86
-  i32.const 1280
+  i64.const 68719476735
+  call $~lib/util/number/utoa64
+  local.tee $37
+  i32.const 14320
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 367
+   i32.const 509
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 5552
-  call $~lib/string/String#replace
-  local.tee $87
-  i32.const 5552
+  i64.const 868719476735
+  call $~lib/util/number/utoa64
+  local.tee $38
+  i32.const 14368
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 368
+   i32.const 510
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5552
-  i32.const 5552
-  i32.const 1280
-  call $~lib/string/String#replace
-  local.tee $88
-  i32.const 1280
+  i64.const 8687194767350
+  call $~lib/util/number/utoa64
+  local.tee $39
+  i32.const 14416
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 369
+   i32.const 511
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5552
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String#replace
-  local.tee $89
-  i32.const 5552
+  i64.const 86871947673501
+  call $~lib/util/number/utoa64
+  local.tee $40
+  i32.const 14464
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 370
+   i32.const 512
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 5584
-  i32.const 5552
-  call $~lib/string/String#replace
-  local.tee $90
-  i32.const 1808
+  i64.const 999868719476735
+  call $~lib/util/number/utoa64
+  local.tee $41
+  i32.const 14512
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 371
+   i32.const 513
    i32.const 1
    call $~lib/builtins/abort
    unreachable
-  end
-  i32.const 1808
-  i32.const 1808
-  i32.const 5552
-  call $~lib/string/String#replace
-  local.tee $91
-  i32.const 5552
+  end
+  i64.const 9999868719476735
+  call $~lib/util/number/utoa64
+  local.tee $145
+  i32.const 14560
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 372
+   i32.const 514
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 2256
-  i32.const 5552
-  call $~lib/string/String#replace
-  local.tee $92
-  i32.const 1808
+  i64.const 19999868719476735
+  call $~lib/util/number/utoa64
+  local.tee $146
+  i32.const 14608
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 373
+   i32.const 515
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 11424
-  i32.const 11424
-  call $~lib/string/String#replace
-  local.tee $93
-  i32.const 1808
+  i64.const 129999868719476735
+  call $~lib/util/number/utoa64
+  local.tee $147
+  i32.const 14672
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 374
+   i32.const 516
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 12080
-  i32.const 5584
-  i32.const 5552
-  call $~lib/string/String#replace
-  local.tee $94
-  i32.const 12112
+  i64.const 1239999868719476735
+  call $~lib/util/number/utoa64
+  local.tee $148
+  i32.const 14736
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 375
+   i32.const 517
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const 5552
-  call $~lib/string/String#replace
-  local.tee $95
-  i32.const 12144
+  i64.const -1
+  call $~lib/util/number/utoa64
+  local.tee $149
+  i32.const 14800
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 376
+   i32.const 518
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 12176
-  i32.const 12208
-  i32.const 5552
-  call $~lib/string/String#replace
-  local.tee $96
-  i32.const 12144
+  i64.const 0
+  call $~lib/util/number/itoa64
+  local.tee $150
+  i32.const 2432
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 377
+   i32.const 520
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 12240
-  i32.const 12272
-  call $~lib/string/String#replace
-  local.tee $97
-  i32.const 12304
+  i64.const -1234
+  call $~lib/util/number/itoa64
+  local.tee $151
+  i32.const 14864
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 378
+   i32.const 521
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 12240
-  i32.const 1280
-  call $~lib/string/String#replace
-  local.tee $98
-  i32.const 11424
+  i64.const 4294967295
+  call $~lib/util/number/itoa64
+  local.tee $152
+  i32.const 14144
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 379
+   i32.const 522
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 1808
-  call $~lib/string/String#replaceAll
-  local.tee $99
-  i32.const 1808
+  i64.const 4294967297
+  call $~lib/util/number/itoa64
+  local.tee $153
+  i32.const 14272
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 381
+   i32.const 523
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 5584
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $100
-  i32.const 1808
+  i64.const -4294967295
+  call $~lib/util/number/itoa64
+  local.tee $154
+  i32.const 14896
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 382
+   i32.const 524
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2000
-  i32.const 1808
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $101
-  i32.const 12272
+  i64.const 68719476735
+  call $~lib/util/number/itoa64
+  local.tee $155
+  i32.const 14320
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 384
+   i32.const 525
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 12336
-  i32.const 1808
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $102
-  i32.const 12384
+  i64.const -68719476735
+  call $~lib/util/number/itoa64
+  local.tee $156
+  i32.const 14944
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 385
+   i32.const 526
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2000
-  i32.const 11424
-  i32.const 11424
-  call $~lib/string/String#replaceAll
-  local.tee $103
-  i32.const 2000
+  i64.const -868719476735
+  call $~lib/util/number/itoa64
+  local.tee $157
+  i32.const 14992
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 386
+   i32.const 527
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 12416
-  i32.const 1328
-  i32.const 12384
-  call $~lib/string/String#replaceAll
-  local.tee $104
-  i32.const 12448
+  i64.const -999868719476735
+  call $~lib/util/number/itoa64
+  local.tee $158
+  i32.const 15040
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 387
+   i32.const 528
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2000
-  i32.const 11424
-  i32.const 12272
-  call $~lib/string/String#replaceAll
-  local.tee $105
-  i32.const 12496
+  i64.const -19999868719476735
+  call $~lib/util/number/itoa64
+  local.tee $159
+  i32.const 15088
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 388
+   i32.const 529
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 12528
-  i32.const 12560
-  i32.const 12272
-  call $~lib/string/String#replaceAll
-  local.tee $106
-  i32.const 12592
+  i64.const 9223372036854775807
+  call $~lib/util/number/itoa64
+  local.tee $160
+  i32.const 15152
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 389
+   i32.const 530
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 2256
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $107
-  i32.const 1808
+  i64.const -9223372036854775808
+  call $~lib/util/number/itoa64
+  local.tee $161
+  i32.const 15216
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 390
+   i32.const 531
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 2256
-  i32.const 12624
-  i32.const 12272
-  call $~lib/string/String#replaceAll
-  local.tee $108
-  i32.const 2256
+  f64.const 0
+  call $~lib/util/number/dtoa
+  local.tee $162
+  i32.const 15280
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 391
+   i32.const 534
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 12656
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $109
-  i32.const 12688
+  f64.const -0
+  call $~lib/util/number/dtoa
+  local.tee $163
+  i32.const 15280
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 392
+   i32.const 535
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 11424
-  i32.const 11424
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $110
-  i32.const 5552
+  f64.const nan:0x8000000000000
+  call $~lib/util/number/dtoa
+  local.tee $164
+  i32.const 5808
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 393
+   i32.const 536
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 12080
-  i32.const 5584
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $111
-  i32.const 12720
+  f64.const inf
+  call $~lib/util/number/dtoa
+  local.tee $165
+  i32.const 15312
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 394
+   i32.const 537
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String#replaceAll
-  local.tee $112
-  i32.const 1280
+  f64.const -inf
+  call $~lib/util/number/dtoa
+  local.tee $166
+  i32.const 7024
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 396
+   i32.const 538
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $113
-  i32.const 5552
+  f64.const 2.220446049250313e-16
+  call $~lib/util/number/dtoa
+  local.tee $167
+  i32.const 6320
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 397
+   i32.const 539
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5552
-  i32.const 5552
-  i32.const 1280
-  call $~lib/string/String#replaceAll
-  local.tee $114
-  i32.const 1280
+  f64.const -2.220446049250313e-16
+  call $~lib/util/number/dtoa
+  local.tee $168
+  i32.const 16256
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 398
+   i32.const 540
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 5552
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String#replaceAll
-  local.tee $115
-  i32.const 5552
+  f64.const 1797693134862315708145274e284
+  call $~lib/util/number/dtoa
+  local.tee $169
+  i32.const 6384
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 399
+   i32.const 541
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 1808
-  i32.const 5584
-  call $~lib/string/String#replaceAll
-  local.tee $116
-  i32.const 5584
+  f64.const -1797693134862315708145274e284
+  call $~lib/util/number/dtoa
+  local.tee $170
+  i32.const 16320
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 400
+   i32.const 542
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 2224
-  i32.const 5584
-  call $~lib/string/String#replaceAll
-  local.tee $117
-  i32.const 1808
+  f64.const 4185580496821356722454785e274
+  call $~lib/util/number/dtoa
+  local.tee $171
+  i32.const 16384
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 401
+   i32.const 543
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const 5552
-  call $~lib/string/String#replaceAll
-  local.tee $118
-  i32.const 12752
+  f64.const 2.2250738585072014e-308
+  call $~lib/util/number/dtoa
+  local.tee $172
+  i32.const 16448
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 402
+   i32.const 544
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const 1280
-  call $~lib/string/String#replaceAll
-  local.tee $119
-  i32.const 1808
+  f64.const 4.940656e-318
+  call $~lib/util/number/dtoa
+  local.tee $173
+  i32.const 16512
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 403
+   i32.const 547
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  call $~lib/rt/pure/__release
-  i32.const 12784
-  global.set $std/string/str
-  i32.const 12784
-  i32.const 0
-  i32.const 2147483647
-  call $~lib/string/String#slice
-  local.tee $120
-  i32.const 12784
+  f64.const 9060801153433600
+  call $~lib/util/number/dtoa
+  local.tee $174
+  i32.const 16560
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 407
+   i32.const 548
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -1
-  i32.const 2147483647
-  call $~lib/string/String#slice
-  local.tee $121
-  i32.const 12832
+  f64.const 4708356024711512064
+  call $~lib/util/number/dtoa
+  local.tee $175
+  i32.const 16624
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 408
+   i32.const 549
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -5
-  i32.const 2147483647
-  call $~lib/string/String#slice
-  local.tee $122
-  i32.const 12864
+  f64.const 9409340012568248320
+  call $~lib/util/number/dtoa
+  local.tee $176
+  i32.const 16688
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 409
+   i32.const 550
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2
-  i32.const 7
-  call $~lib/string/String#slice
-  local.tee $123
-  i32.const 12896
+  f64.const 5e-324
+  call $~lib/util/number/dtoa
+  local.tee $177
+  i32.const 6448
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 410
+   i32.const 551
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -11
-  i32.const -6
-  call $~lib/string/String#slice
-  local.tee $124
-  i32.const 12928
+  f64.const 1
+  call $~lib/util/number/dtoa
+  local.tee $178
+  i32.const 16752
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 411
+   i32.const 557
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 4
-  i32.const 3
-  call $~lib/string/String#slice
-  local.tee $125
-  i32.const 1280
+  f64.const 0.1
+  call $~lib/util/number/dtoa
+  local.tee $179
+  i32.const 3456
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 412
+   i32.const 558
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const -1
-  call $~lib/string/String#slice
-  local.tee $126
-  i32.const 12960
+  f64.const -1
+  call $~lib/util/number/dtoa
+  local.tee $180
+  i32.const 16784
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 413
+   i32.const 559
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const 2147483647
-  call $~lib/string/String#substr
-  local.tee $127
-  i32.const 12784
+  f64.const -0.1
+  call $~lib/util/number/dtoa
+  local.tee $181
+  i32.const 16816
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 415
+   i32.const 560
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -1
-  i32.const 2147483647
-  call $~lib/string/String#substr
-  local.tee $128
-  i32.const 12832
+  f64.const 1e6
+  call $~lib/util/number/dtoa
+  local.tee $182
+  i32.const 16848
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 416
+   i32.const 562
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -5
-  i32.const 2147483647
-  call $~lib/string/String#substr
-  local.tee $129
-  i32.const 12864
+  f64.const 1e-06
+  call $~lib/util/number/dtoa
+  local.tee $183
+  i32.const 16896
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 417
+   i32.const 563
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2
-  i32.const 7
-  call $~lib/string/String#substr
-  local.tee $130
-  i32.const 13008
+  f64.const -1e6
+  call $~lib/util/number/dtoa
+  local.tee $184
+  i32.const 16928
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 418
+   i32.const 564
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -11
-  i32.const -6
-  call $~lib/string/String#substr
-  local.tee $131
-  i32.const 1280
+  f64.const -1e-06
+  call $~lib/util/number/dtoa
+  local.tee $185
+  i32.const 16976
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 419
+   i32.const 565
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 4
-  i32.const 3
-  call $~lib/string/String#substr
-  local.tee $132
-  i32.const 13040
+  f64.const 1e7
+  call $~lib/util/number/dtoa
+  local.tee $186
+  i32.const 17024
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 420
+   i32.const 566
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const -1
-  call $~lib/string/String#substr
-  local.tee $133
-  i32.const 1280
+  f64.const 1e-07
+  call $~lib/util/number/dtoa
+  local.tee $187
+  i32.const 17072
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 421
+   i32.const 567
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const 100
-  call $~lib/string/String#substr
-  local.tee $134
-  i32.const 12784
+  f64.const 1.e+308
+  call $~lib/util/number/dtoa
+  local.tee $188
+  i32.const 3680
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 422
+   i32.const 569
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 4
-  i32.const 4
-  call $~lib/string/String#substr
-  local.tee $135
-  i32.const 13072
+  f64.const -1.e+308
+  call $~lib/util/number/dtoa
+  local.tee $189
+  i32.const 17104
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 423
+   i32.const 570
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 4
-  i32.const -3
-  call $~lib/string/String#substr
-  local.tee $136
-  i32.const 1280
+  f64.const inf
+  call $~lib/util/number/dtoa
+  local.tee $190
+  i32.const 15312
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 424
+   i32.const 571
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const 2147483647
-  call $~lib/string/String#substring
-  local.tee $137
-  i32.const 12784
+  f64.const -inf
+  call $~lib/util/number/dtoa
+  local.tee $191
+  i32.const 7024
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 426
+   i32.const 572
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -1
-  i32.const 2147483647
-  call $~lib/string/String#substring
-  local.tee $138
-  i32.const 12784
+  f64.const 1e-308
+  call $~lib/util/number/dtoa
+  local.tee $192
+  i32.const 17136
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 427
+   i32.const 573
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -5
-  i32.const 2147483647
-  call $~lib/string/String#substring
-  local.tee $139
-  i32.const 12784
+  f64.const -1e-308
+  call $~lib/util/number/dtoa
+  local.tee $193
+  i32.const 17168
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 428
+   i32.const 574
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 2
-  i32.const 7
-  call $~lib/string/String#substring
-  local.tee $140
-  i32.const 12896
+  f64.const 1e-323
+  call $~lib/util/number/dtoa
+  local.tee $194
+  i32.const 17200
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 429
+   i32.const 575
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const -11
-  i32.const -6
-  call $~lib/string/String#substring
-  local.tee $141
-  i32.const 1280
+  f64.const -1e-323
+  call $~lib/util/number/dtoa
+  local.tee $195
+  i32.const 17232
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 430
+   i32.const 576
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 4
-  i32.const 3
-  call $~lib/string/String#substring
-  local.tee $142
-  i32.const 13104
+  f64.const 0
+  call $~lib/util/number/dtoa
+  local.tee $196
+  i32.const 15280
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 431
+   i32.const 577
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const -1
-  call $~lib/string/String#substring
-  local.tee $143
-  i32.const 1280
+  f64.const 4294967272
+  call $~lib/util/number/dtoa
+  local.tee $197
+  i32.const 17264
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 432
+   i32.const 579
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 0
-  i32.const 100
-  call $~lib/string/String#substring
-  local.tee $144
-  i32.const 12784
+  f64.const 1.2312145673456234e-08
+  call $~lib/util/number/dtoa
+  local.tee $198
+  i32.const 17312
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 433
+   i32.const 580
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 4
-  i32.const 4
-  call $~lib/string/String#substring
-  local.tee $145
-  i32.const 1280
+  f64.const 555555555.5555556
+  call $~lib/util/number/dtoa
+  local.tee $199
+  i32.const 17376
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 434
+   i32.const 582
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  global.get $std/string/str
-  i32.const 4
-  i32.const -3
-  call $~lib/string/String#substring
-  local.tee $146
-  i32.const 2256
+  f64.const 0.9999999999999999
+  call $~lib/util/number/dtoa
+  local.tee $200
+  i32.const 17440
   call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 435
+   i32.const 583
    i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 0
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.tee $1
-  i32.load offset=12
-  i32.const 1
-  i32.eq
-  if
-   local.get $1
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1280
-   call $~lib/string/String.__eq
-   local.set $9
-   local.get $0
-   call $~lib/rt/pure/__release
-  end
-  local.get $9
+  f64.const 1
+  call $~lib/util/number/dtoa
+  local.tee $201
+  i32.const 16752
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 441
-   i32.const 3
+   i32.const 584
+   i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 1280
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $0
-  i32.load offset=12
+  f64.const 12.34
+  call $~lib/util/number/dtoa
+  local.tee $202
+  i32.const 17504
+  call $~lib/string/String.__eq
+  i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 443
-   i32.const 3
+   i32.const 585
+   i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1280
-  i32.const 2064
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $9
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $9
-  i32.load offset=12
-  i32.const 1
-  i32.eq
-  if
-   local.get $9
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1280
-   call $~lib/string/String.__eq
-   local.set $13
-   local.get $0
-   call $~lib/rt/pure/__release
-  end
-  local.get $13
+  f64.const 0.3333333333333333
+  call $~lib/util/number/dtoa
+  local.tee $203
+  i32.const 17536
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 445
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 13360
-  i32.const 5744
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $1
-  local.get $9
-  call $~lib/rt/pure/__release
-  local.get $1
-  i32.load offset=12
-  i32.const 1
-  i32.eq
-  if
-   local.get $1
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 13360
-   call $~lib/string/String.__eq
-   local.set $5
-   local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 587
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $5
+  f64.const 1234e17
+  call $~lib/util/number/dtoa
+  local.tee $204
+  i32.const 17600
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 447
-   i32.const 3
+   i32.const 588
+   i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 13360
-  i32.const 2064
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $5
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $5
-  i32.load offset=12
-  i32.const 3
-  i32.eq
+  f64.const 1234e18
+  call $~lib/util/number/dtoa
+  local.tee $205
+  i32.const 17664
+  call $~lib/string/String.__eq
+  i32.eqz
   if
-   local.get $5
    i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $14
-   local.get $0
-   call $~lib/rt/pure/__release
-  end
-  local.get $14
-  if
-   local.get $5
+   i32.const 1088
+   i32.const 589
    i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $15
-   local.get $0
-   call $~lib/rt/pure/__release
-  end
-  local.get $15
-  if
-   local.get $5
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $16
-   local.get $0
-   call $~lib/rt/pure/__release
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $16
+  f64.const 2.71828
+  call $~lib/util/number/dtoa
+  local.tee $206
+  i32.const 17712
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 449
-   i32.const 3
+   i32.const 590
+   i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 13392
-  i32.const 13424
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $1
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $1
-  i32.load offset=12
-  i32.const 3
-  i32.eq
+  f64.const 0.0271828
+  call $~lib/util/number/dtoa
+  local.tee $207
+  i32.const 17744
+  call $~lib/string/String.__eq
+  i32.eqz
   if
-   local.get $1
    i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $17
-   local.get $0
-   call $~lib/rt/pure/__release
-  end
-  local.get $17
-  if
-   local.get $1
+   i32.const 1088
+   i32.const 591
    i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $18
-   local.get $0
-   call $~lib/rt/pure/__release
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $18
+  f64.const 271.828
+  call $~lib/util/number/dtoa
+  local.tee $208
+  i32.const 17792
+  call $~lib/string/String.__eq
+  i32.eqz
   if
-   local.get $1
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $3
-   local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 0
+   i32.const 1088
+   i32.const 592
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $3
+  f64.const 1.1e+128
+  call $~lib/util/number/dtoa
+  local.tee $209
+  i32.const 17824
+  call $~lib/string/String.__eq
   i32.eqz
   if
    i32.const 0
    i32.const 1088
-   i32.const 451
-   i32.const 3
+   i32.const 593
+   i32.const 1
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 13456
-  i32.const 2064
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $3
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $3
-  i32.load offset=12
-  i32.const 4
-  i32.eq
+  f64.const 1.1e-64
+  call $~lib/util/number/dtoa
+  local.tee $210
+  i32.const 17856
+  call $~lib/string/String.__eq
+  i32.eqz
   if
-   local.get $3
    i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $19
-   local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 1088
+   i32.const 594
+   i32.const 1
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $19
+  f64.const 0.000035689
+  call $~lib/util/number/dtoa
+  local.tee $211
+  i32.const 17888
+  call $~lib/string/String.__eq
+  i32.eqz
   if
-   local.get $3
+   i32.const 0
+   i32.const 1088
+   i32.const 595
    i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $20
-   local.get $0
-   call $~lib/rt/pure/__release
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $20
+  global.get $std/string/str
+  local.tee $212
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $3
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1280
-   call $~lib/string/String.__eq
-   local.set $21
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $212
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $21
+  local.get $43
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $3
-   i32.const 3
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $22
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $43
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $22
-  i32.eqz
+  local.get $44
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 453
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $44
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 13488
-  i32.const 2064
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $1
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $1
-  i32.load offset=12
-  i32.const 4
-  i32.eq
+  local.get $45
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1280
-   call $~lib/string/String.__eq
-   local.set $23
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $45
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $46
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $46
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $23
+  local.get $47
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $24
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $47
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $24
+  local.get $48
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $25
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $48
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $25
+  local.get $49
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 3
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $4
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $49
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $4
-  i32.eqz
+  local.get $50
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 455
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $50
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 13520
-  i32.const 2064
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $4
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $4
-  i32.load offset=12
-  i32.const 4
-  i32.eq
+  local.get $51
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $4
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $26
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $51
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $26
+  local.get $52
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $4
-   i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $27
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $52
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $27
+  local.get $53
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $4
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $28
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $53
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $28
+  local.get $54
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $4
-   i32.const 3
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1280
-   call $~lib/string/String.__eq
-   local.set $29
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $54
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $29
-  i32.eqz
+  local.get $55
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 457
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $55
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const 2147483647
-  call $~lib/string/String#split
-  local.set $1
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $1
-  i32.load offset=12
-  i32.const 3
-  i32.eq
+  local.get $56
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $30
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $56
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $30
+  local.get $57
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $31
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $57
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $31
+  local.get $58
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $10
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $58
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $10
-  i32.eqz
+  local.get $59
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 459
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $59
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const 0
-  call $~lib/string/String#split
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $0
-  i32.load offset=12
+  local.get $60
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 461
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $60
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const 1
-  call $~lib/string/String#split
-  local.set $10
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $10
-  i32.load offset=12
-  i32.const 1
-  i32.eq
+  local.get $61
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $10
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $32
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $61
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $32
-  i32.eqz
+  local.get $62
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 463
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $62
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 13360
-  i32.const 2064
-  i32.const 1
-  call $~lib/string/String#split
-  local.set $1
-  local.get $10
-  call $~lib/rt/pure/__release
-  local.get $1
-  i32.load offset=12
-  i32.const 1
-  i32.eq
+  local.get $63
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $6
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $63
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $6
-  i32.eqz
+  local.get $64
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 465
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $64
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const 4
-  call $~lib/string/String#split
-  local.set $6
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $6
-  i32.load offset=12
-  i32.const 3
-  i32.eq
+  local.get $65
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $6
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $33
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $65
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $33
+  local.get $66
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $6
-   i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $34
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $66
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $34
+  local.get $67
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $6
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $7
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $67
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $7
-  i32.eqz
+  local.get $68
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 467
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $68
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1808
-  i32.const 1280
-  i32.const -1
-  call $~lib/string/String#split
-  local.set $7
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $7
-  i32.load offset=12
-  i32.const 3
-  i32.eq
+  local.get $69
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $7
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $35
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $69
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $35
+  local.get $70
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $7
-   i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $36
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $70
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $36
+  local.get $71
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $7
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $37
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $71
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $37
-  i32.eqz
+  local.get $72
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 469
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $72
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 13360
-  i32.const 2064
-  i32.const -1
-  call $~lib/string/String#split
-  local.set $1
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $1
-  i32.load offset=12
-  i32.const 3
-  i32.eq
+  local.get $73
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 0
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 1328
-   call $~lib/string/String.__eq
-   local.set $38
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $73
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $38
+  local.get $74
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 1
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 11392
-   call $~lib/string/String.__eq
-   local.set $39
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $74
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $39
+  local.get $3
+  i32.const 17912
+  i32.gt_u
   if
-   local.get $1
-   i32.const 2
-   call $~lib/array/Array<~lib/string/String>#__get
-   local.tee $0
-   i32.const 12240
-   call $~lib/string/String.__eq
-   local.set $40
-   local.get $0
-   call $~lib/rt/pure/__release
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $40
-  i32.eqz
+  local.get $5
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $42
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 471
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $42
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $1
-  call $~lib/rt/pure/__release
-  i32.const 0
-  call $~lib/util/number/itoa32
-  local.tee $147
-  i32.const 2432
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $75
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 474
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $75
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1
-  call $~lib/util/number/itoa32
-  local.tee $148
-  i32.const 2496
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $78
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 475
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $78
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 8
-  call $~lib/util/number/itoa32
-  local.tee $149
-  i32.const 13552
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $79
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 476
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $79
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 12
-  call $~lib/util/number/itoa32
-  local.tee $150
-  i32.const 13584
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $77
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 477
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $77
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 123
-  call $~lib/util/number/itoa32
-  local.tee $151
-  i32.const 1872
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $76
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 478
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $76
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const -1000
-  call $~lib/util/number/itoa32
-  local.tee $152
-  i32.const 13616
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $6
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 479
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1234
-  call $~lib/util/number/itoa32
-  local.tee $153
-  i32.const 13648
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $80
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 480
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $80
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 12345
-  call $~lib/util/number/itoa32
-  local.tee $154
-  i32.const 13680
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $81
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 481
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $81
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 123456
-  call $~lib/util/number/itoa32
-  local.tee $155
-  i32.const 13712
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $82
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 482
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $82
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1111111
-  call $~lib/util/number/itoa32
-  local.tee $156
-  i32.const 13744
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $83
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 483
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $83
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1234567
-  call $~lib/util/number/itoa32
-  local.tee $157
-  i32.const 13776
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $84
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 484
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $84
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 12345678
-  call $~lib/util/number/itoa32
-  local.tee $158
-  i32.const 13808
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $85
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 485
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $85
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 123456789
-  call $~lib/util/number/itoa32
-  local.tee $159
-  i32.const 13840
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $86
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 486
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $86
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 2147483646
-  call $~lib/util/number/itoa32
-  local.tee $160
-  i32.const 13888
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $87
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 487
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $87
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 2147483647
-  call $~lib/util/number/itoa32
-  local.tee $161
-  i32.const 13936
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $88
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 488
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $88
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const -2147483648
-  call $~lib/util/number/itoa32
-  local.tee $162
-  i32.const 13984
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $89
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 489
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $89
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const -1
-  call $~lib/util/number/itoa32
-  local.tee $163
-  i32.const 14032
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $90
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 490
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $90
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 0
-  call $~lib/util/number/utoa32
-  local.tee $164
-  i32.const 2432
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $91
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 492
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $91
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 1000
-  call $~lib/util/number/utoa32
-  local.tee $165
-  i32.const 14064
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $92
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 493
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $92
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const 2147483647
-  call $~lib/util/number/utoa32
-  local.tee $166
-  i32.const 13936
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $93
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 494
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $93
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const -2147483648
-  call $~lib/util/number/utoa32
-  local.tee $167
-  i32.const 14096
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $94
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 495
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $94
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i32.const -1
-  call $~lib/util/number/utoa32
-  local.tee $168
-  i32.const 14144
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $95
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 496
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $95
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 0
-  call $~lib/util/number/utoa64
-  local.tee $169
-  i32.const 2432
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $96
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 498
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $96
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 12
-  call $~lib/util/number/utoa64
-  local.tee $170
-  i32.const 13584
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $97
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 499
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $97
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 123
-  call $~lib/util/number/utoa64
-  local.tee $171
-  i32.const 1872
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $98
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 500
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $98
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 1234
-  call $~lib/util/number/utoa64
-  local.tee $172
-  i32.const 13648
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $99
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 501
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $99
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 12345
-  call $~lib/util/number/utoa64
-  local.tee $173
-  i32.const 13680
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $100
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 502
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $100
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 123456
-  call $~lib/util/number/utoa64
-  local.tee $174
-  i32.const 13712
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $101
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $101
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $102
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 503
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $102
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 1234567
-  call $~lib/util/number/utoa64
-  local.tee $175
-  i32.const 13776
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $103
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 504
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $103
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 99999999
-  call $~lib/util/number/utoa64
-  local.tee $176
-  i32.const 14192
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $104
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 505
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $104
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 100000000
-  call $~lib/util/number/utoa64
-  local.tee $177
-  i32.const 14224
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $105
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 506
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $105
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 4294967295
-  call $~lib/util/number/utoa64
-  local.tee $178
-  i32.const 14144
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $106
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 507
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $106
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 4294967297
-  call $~lib/util/number/utoa64
-  local.tee $179
-  i32.const 14272
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $107
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 508
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $107
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 68719476735
-  call $~lib/util/number/utoa64
-  local.tee $180
-  i32.const 14320
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $108
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 509
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $108
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 868719476735
-  call $~lib/util/number/utoa64
-  local.tee $181
-  i32.const 14368
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $109
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 510
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $109
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 8687194767350
-  call $~lib/util/number/utoa64
-  local.tee $182
-  i32.const 14416
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $110
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 511
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $110
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 86871947673501
-  call $~lib/util/number/utoa64
-  local.tee $183
-  i32.const 14464
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $111
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 512
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $111
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 999868719476735
-  call $~lib/util/number/utoa64
-  local.tee $184
-  i32.const 14512
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $112
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 513
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $112
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 9999868719476735
-  call $~lib/util/number/utoa64
-  local.tee $185
-  i32.const 14560
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $113
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 514
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $113
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 19999868719476735
-  call $~lib/util/number/utoa64
-  local.tee $186
-  i32.const 14608
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $114
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 515
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $114
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 129999868719476735
-  call $~lib/util/number/utoa64
-  local.tee $187
-  i32.const 14672
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $115
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 516
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $115
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 1239999868719476735
-  call $~lib/util/number/utoa64
-  local.tee $188
-  i32.const 14736
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $116
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 517
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $116
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -1
-  call $~lib/util/number/utoa64
-  local.tee $189
-  i32.const 14800
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $117
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 518
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $117
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 0
-  call $~lib/util/number/itoa64
-  local.tee $190
-  i32.const 2432
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $118
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 520
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $118
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -1234
-  call $~lib/util/number/itoa64
-  local.tee $191
-  i32.const 14864
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $119
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 521
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $119
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 4294967295
-  call $~lib/util/number/itoa64
-  local.tee $192
-  i32.const 14144
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $120
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 522
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $120
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 4294967297
-  call $~lib/util/number/itoa64
-  local.tee $193
-  i32.const 14272
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $121
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 523
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $121
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -4294967295
-  call $~lib/util/number/itoa64
-  local.tee $194
-  i32.const 14896
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $122
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 524
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $122
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 68719476735
-  call $~lib/util/number/itoa64
-  local.tee $195
-  i32.const 14320
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $123
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 525
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $123
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -68719476735
-  call $~lib/util/number/itoa64
-  local.tee $196
-  i32.const 14944
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $124
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 526
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $124
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -868719476735
-  call $~lib/util/number/itoa64
-  local.tee $197
-  i32.const 14992
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $125
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 527
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $125
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -999868719476735
-  call $~lib/util/number/itoa64
-  local.tee $198
-  i32.const 15040
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $126
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 528
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $126
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -19999868719476735
-  call $~lib/util/number/itoa64
-  local.tee $199
-  i32.const 15088
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $127
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 529
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $127
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const 9223372036854775807
-  call $~lib/util/number/itoa64
-  local.tee $200
-  i32.const 15152
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $128
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 530
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $128
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  i64.const -9223372036854775808
-  call $~lib/util/number/itoa64
-  local.tee $201
-  i32.const 15216
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $129
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 531
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $129
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0
-  call $~lib/util/number/dtoa
-  local.tee $202
-  i32.const 15280
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $130
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $130
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $131
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 534
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $131
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -0
-  call $~lib/util/number/dtoa
-  local.tee $203
-  i32.const 15280
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $132
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 535
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $132
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const nan:0x8000000000000
-  call $~lib/util/number/dtoa
-  local.tee $204
-  i32.const 5808
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $133
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 536
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $133
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const inf
-  call $~lib/util/number/dtoa
-  local.tee $205
-  i32.const 15312
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $134
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 537
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $134
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -inf
-  call $~lib/util/number/dtoa
-  local.tee $206
-  i32.const 7024
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $135
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 538
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $135
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 2.220446049250313e-16
-  call $~lib/util/number/dtoa
-  local.tee $207
-  i32.const 6320
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $136
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 539
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $136
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -2.220446049250313e-16
-  call $~lib/util/number/dtoa
-  local.tee $208
-  i32.const 16256
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $137
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 540
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $137
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1797693134862315708145274e284
-  call $~lib/util/number/dtoa
-  local.tee $209
-  i32.const 6384
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $138
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 541
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $138
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -1797693134862315708145274e284
-  call $~lib/util/number/dtoa
-  local.tee $210
-  i32.const 16320
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $139
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 542
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $139
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 4185580496821356722454785e274
-  call $~lib/util/number/dtoa
-  local.tee $211
-  i32.const 16384
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $140
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 543
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $140
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 2.2250738585072014e-308
-  call $~lib/util/number/dtoa
-  local.tee $12
-  i32.const 16448
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $141
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 544
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $141
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 4.940656e-318
-  call $~lib/util/number/dtoa
-  local.tee $11
-  i32.const 16512
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $142
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 547
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $142
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 9060801153433600
-  call $~lib/util/number/dtoa
-  local.tee $8
-  i32.const 16560
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $143
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 548
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $143
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 4708356024711512064
-  call $~lib/util/number/dtoa
-  local.tee $9
-  i32.const 16624
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $144
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 549
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $144
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 9409340012568248320
-  call $~lib/util/number/dtoa
-  local.tee $13
-  i32.const 16688
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $1
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 550
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 5e-324
-  call $~lib/util/number/dtoa
-  local.tee $5
-  i32.const 6448
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $4
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 551
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1
-  call $~lib/util/number/dtoa
-  local.tee $14
-  i32.const 16752
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $0
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 557
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0.1
-  call $~lib/util/number/dtoa
-  local.tee $15
-  i32.const 3456
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $7
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 558
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -1
-  call $~lib/util/number/dtoa
-  local.tee $16
-  i32.const 16784
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $8
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 559
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $8
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -0.1
-  call $~lib/util/number/dtoa
-  local.tee $17
-  i32.const 16816
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $9
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 560
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $9
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1e6
-  call $~lib/util/number/dtoa
-  local.tee $18
-  i32.const 16848
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $10
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 562
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $10
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1e-06
-  call $~lib/util/number/dtoa
-  local.tee $3
-  i32.const 16896
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $11
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 563
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $11
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -1e6
-  call $~lib/util/number/dtoa
-  local.tee $19
-  i32.const 16928
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $12
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 564
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $12
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -1e-06
-  call $~lib/util/number/dtoa
-  local.tee $20
-  i32.const 16976
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $13
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 565
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $13
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1e7
-  call $~lib/util/number/dtoa
-  local.tee $21
-  i32.const 17024
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $14
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 566
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $14
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1e-07
-  call $~lib/util/number/dtoa
-  local.tee $22
-  i32.const 17072
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $15
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 567
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $15
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1.e+308
-  call $~lib/util/number/dtoa
-  local.tee $23
-  i32.const 3680
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $16
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 569
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $16
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -1.e+308
-  call $~lib/util/number/dtoa
-  local.tee $24
-  i32.const 17104
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $17
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 570
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $17
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $18
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $18
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const inf
-  call $~lib/util/number/dtoa
-  local.tee $25
-  i32.const 15312
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $19
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 571
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $19
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -inf
-  call $~lib/util/number/dtoa
-  local.tee $4
-  i32.const 7024
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $20
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 572
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $20
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1e-308
-  call $~lib/util/number/dtoa
-  local.tee $26
-  i32.const 17136
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $21
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 573
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $21
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -1e-308
-  call $~lib/util/number/dtoa
-  local.tee $27
-  i32.const 17168
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $22
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 574
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1e-323
-  call $~lib/util/number/dtoa
-  local.tee $28
-  i32.const 17200
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $23
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 575
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $23
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const -1e-323
-  call $~lib/util/number/dtoa
-  local.tee $29
-  i32.const 17232
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $24
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 576
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0
-  call $~lib/util/number/dtoa
-  local.tee $30
-  i32.const 15280
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $25
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 577
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 4294967272
-  call $~lib/util/number/dtoa
-  local.tee $31
-  i32.const 17264
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $26
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 579
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1.2312145673456234e-08
-  call $~lib/util/number/dtoa
-  local.tee $10
-  i32.const 17312
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $27
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 580
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 555555555.5555556
-  call $~lib/util/number/dtoa
-  local.tee $32
-  i32.const 17376
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $28
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 582
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0.9999999999999999
-  call $~lib/util/number/dtoa
-  local.tee $6
-  i32.const 17440
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $29
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 583
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $29
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1
-  call $~lib/util/number/dtoa
-  local.tee $33
-  i32.const 16752
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $30
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 584
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $30
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 12.34
-  call $~lib/util/number/dtoa
-  local.tee $34
-  i32.const 17504
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $31
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 585
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $31
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0.3333333333333333
-  call $~lib/util/number/dtoa
-  local.tee $7
-  i32.const 17536
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $32
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 587
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $32
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1234e17
-  call $~lib/util/number/dtoa
-  local.tee $35
-  i32.const 17600
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $33
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 588
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $33
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1234e18
-  call $~lib/util/number/dtoa
-  local.tee $36
-  i32.const 17664
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $34
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 589
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $34
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 2.71828
-  call $~lib/util/number/dtoa
-  local.tee $37
-  i32.const 17712
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $35
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 590
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $35
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0.0271828
-  call $~lib/util/number/dtoa
-  local.tee $38
-  i32.const 17744
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $36
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 591
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $36
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 271.828
-  call $~lib/util/number/dtoa
-  local.tee $39
-  i32.const 17792
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $37
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 592
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $37
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1.1e+128
-  call $~lib/util/number/dtoa
-  local.tee $40
-  i32.const 17824
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $38
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 593
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $38
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 1.1e-64
-  call $~lib/util/number/dtoa
-  local.tee $1
-  i32.const 17856
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $39
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 594
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $39
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0.000035689
-  call $~lib/util/number/dtoa
-  local.tee $0
-  i32.const 17888
-  call $~lib/string/String.__eq
-  i32.eqz
+  local.get $40
+  i32.const 17912
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1088
-   i32.const 595
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
+   local.get $40
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  global.get $std/string/str
-  call $~lib/rt/pure/__release
   local.get $41
-  call $~lib/rt/pure/__release
-  local.get $42
-  call $~lib/rt/pure/__release
-  local.get $43
-  call $~lib/rt/pure/__release
-  local.get $44
-  call $~lib/rt/pure/__release
-  local.get $45
-  call $~lib/rt/pure/__release
-  local.get $46
-  call $~lib/rt/pure/__release
-  local.get $47
-  call $~lib/rt/pure/__release
-  local.get $48
-  call $~lib/rt/pure/__release
-  local.get $49
-  call $~lib/rt/pure/__release
-  local.get $50
-  call $~lib/rt/pure/__release
-  local.get $51
-  call $~lib/rt/pure/__release
-  local.get $52
-  call $~lib/rt/pure/__release
-  local.get $53
-  call $~lib/rt/pure/__release
-  local.get $54
-  call $~lib/rt/pure/__release
-  local.get $55
-  call $~lib/rt/pure/__release
-  local.get $56
-  call $~lib/rt/pure/__release
-  local.get $57
-  call $~lib/rt/pure/__release
-  local.get $58
-  call $~lib/rt/pure/__release
-  local.get $59
-  call $~lib/rt/pure/__release
-  local.get $60
-  call $~lib/rt/pure/__release
-  local.get $61
-  call $~lib/rt/pure/__release
-  local.get $62
-  call $~lib/rt/pure/__release
-  local.get $63
-  call $~lib/rt/pure/__release
-  local.get $64
-  call $~lib/rt/pure/__release
-  local.get $65
-  call $~lib/rt/pure/__release
-  local.get $66
-  call $~lib/rt/pure/__release
-  local.get $67
-  call $~lib/rt/pure/__release
-  local.get $68
-  call $~lib/rt/pure/__release
-  local.get $69
-  call $~lib/rt/pure/__release
-  local.get $70
-  call $~lib/rt/pure/__release
-  local.get $71
-  call $~lib/rt/pure/__release
-  local.get $72
-  call $~lib/rt/pure/__release
-  local.get $73
-  call $~lib/rt/pure/__release
-  local.get $74
-  call $~lib/rt/pure/__release
-  local.get $75
-  call $~lib/rt/pure/__release
-  local.get $76
-  call $~lib/rt/pure/__release
-  local.get $80
-  call $~lib/rt/pure/__release
-  local.get $81
-  call $~lib/rt/pure/__release
-  local.get $79
-  call $~lib/rt/pure/__release
-  local.get $78
-  call $~lib/rt/pure/__release
-  local.get $77
-  call $~lib/rt/pure/__release
-  local.get $82
-  call $~lib/rt/pure/__release
-  local.get $83
-  call $~lib/rt/pure/__release
-  local.get $84
-  call $~lib/rt/pure/__release
-  local.get $85
-  call $~lib/rt/pure/__release
-  local.get $86
-  call $~lib/rt/pure/__release
-  local.get $87
-  call $~lib/rt/pure/__release
-  local.get $88
-  call $~lib/rt/pure/__release
-  local.get $89
-  call $~lib/rt/pure/__release
-  local.get $90
-  call $~lib/rt/pure/__release
-  local.get $91
-  call $~lib/rt/pure/__release
-  local.get $92
-  call $~lib/rt/pure/__release
-  local.get $93
-  call $~lib/rt/pure/__release
-  local.get $94
-  call $~lib/rt/pure/__release
-  local.get $95
-  call $~lib/rt/pure/__release
-  local.get $96
-  call $~lib/rt/pure/__release
-  local.get $97
-  call $~lib/rt/pure/__release
-  local.get $98
-  call $~lib/rt/pure/__release
-  local.get $99
-  call $~lib/rt/pure/__release
-  local.get $100
-  call $~lib/rt/pure/__release
-  local.get $101
-  call $~lib/rt/pure/__release
-  local.get $102
-  call $~lib/rt/pure/__release
-  local.get $103
-  call $~lib/rt/pure/__release
-  local.get $104
-  call $~lib/rt/pure/__release
-  local.get $105
-  call $~lib/rt/pure/__release
-  local.get $106
-  call $~lib/rt/pure/__release
-  local.get $107
-  call $~lib/rt/pure/__release
-  local.get $108
-  call $~lib/rt/pure/__release
-  local.get $109
-  call $~lib/rt/pure/__release
-  local.get $110
-  call $~lib/rt/pure/__release
-  local.get $111
-  call $~lib/rt/pure/__release
-  local.get $112
-  call $~lib/rt/pure/__release
-  local.get $113
-  call $~lib/rt/pure/__release
-  local.get $114
-  call $~lib/rt/pure/__release
-  local.get $115
-  call $~lib/rt/pure/__release
-  local.get $116
-  call $~lib/rt/pure/__release
-  local.get $117
-  call $~lib/rt/pure/__release
-  local.get $118
-  call $~lib/rt/pure/__release
-  local.get $119
-  call $~lib/rt/pure/__release
-  local.get $120
-  call $~lib/rt/pure/__release
-  local.get $121
-  call $~lib/rt/pure/__release
-  local.get $122
-  call $~lib/rt/pure/__release
-  local.get $123
-  call $~lib/rt/pure/__release
-  local.get $124
-  call $~lib/rt/pure/__release
-  local.get $125
-  call $~lib/rt/pure/__release
-  local.get $126
-  call $~lib/rt/pure/__release
-  local.get $127
-  call $~lib/rt/pure/__release
-  local.get $128
-  call $~lib/rt/pure/__release
-  local.get $129
-  call $~lib/rt/pure/__release
-  local.get $130
-  call $~lib/rt/pure/__release
-  local.get $131
-  call $~lib/rt/pure/__release
-  local.get $132
-  call $~lib/rt/pure/__release
-  local.get $133
-  call $~lib/rt/pure/__release
-  local.get $134
-  call $~lib/rt/pure/__release
-  local.get $135
-  call $~lib/rt/pure/__release
-  local.get $136
-  call $~lib/rt/pure/__release
-  local.get $137
-  call $~lib/rt/pure/__release
-  local.get $138
-  call $~lib/rt/pure/__release
-  local.get $139
-  call $~lib/rt/pure/__release
-  local.get $140
-  call $~lib/rt/pure/__release
-  local.get $141
-  call $~lib/rt/pure/__release
-  local.get $142
-  call $~lib/rt/pure/__release
-  local.get $143
-  call $~lib/rt/pure/__release
-  local.get $144
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $41
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $145
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $145
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $146
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $146
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $147
-  call $~lib/rt/pure/__release
-  local.get $149
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $147
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $148
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $148
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $149
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $149
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $150
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $150
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $151
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $151
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $152
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $152
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $153
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $153
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $154
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $154
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $155
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $155
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $156
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $156
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $157
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $157
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $158
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $158
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $159
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $159
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $160
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $160
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $161
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $161
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $162
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $162
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $163
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $163
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $164
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $164
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $165
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $165
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $166
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $166
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $167
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $167
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $168
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $168
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $169
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $169
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $170
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $170
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $171
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $171
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $172
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $172
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $173
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $173
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $174
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $174
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $175
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $175
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $176
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $176
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $177
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $177
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $178
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $178
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $179
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $179
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $180
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $180
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $181
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $181
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $182
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $182
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $183
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $183
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $184
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $184
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $185
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $185
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $186
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $186
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $187
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $187
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $188
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $188
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $189
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $189
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $190
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $190
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $191
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $191
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $192
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $192
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $193
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $193
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $194
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $194
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $195
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $195
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $196
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $196
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $197
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $197
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $198
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $198
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $199
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $199
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $200
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $200
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $201
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $201
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $202
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $202
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $203
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $203
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $204
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $204
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $205
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $205
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $206
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $206
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $207
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $207
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $208
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $208
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $209
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $209
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $210
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $210
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $211
-  call $~lib/rt/pure/__release
-  local.get $12
-  call $~lib/rt/pure/__release
-  local.get $11
-  call $~lib/rt/pure/__release
-  local.get $8
-  call $~lib/rt/pure/__release
-  local.get $9
-  call $~lib/rt/pure/__release
-  local.get $13
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
-  local.get $14
-  call $~lib/rt/pure/__release
-  local.get $15
-  call $~lib/rt/pure/__release
-  local.get $16
-  call $~lib/rt/pure/__release
-  local.get $17
-  call $~lib/rt/pure/__release
-  local.get $18
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $19
-  call $~lib/rt/pure/__release
-  local.get $20
-  call $~lib/rt/pure/__release
-  local.get $21
-  call $~lib/rt/pure/__release
-  local.get $22
-  call $~lib/rt/pure/__release
-  local.get $23
-  call $~lib/rt/pure/__release
-  local.get $24
-  call $~lib/rt/pure/__release
-  local.get $25
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $26
-  call $~lib/rt/pure/__release
-  local.get $27
-  call $~lib/rt/pure/__release
-  local.get $28
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
-  local.get $31
-  call $~lib/rt/pure/__release
-  local.get $10
-  call $~lib/rt/pure/__release
-  local.get $32
-  call $~lib/rt/pure/__release
-  local.get $6
-  call $~lib/rt/pure/__release
-  local.get $33
-  call $~lib/rt/pure/__release
-  local.get $34
-  call $~lib/rt/pure/__release
-  local.get $7
-  call $~lib/rt/pure/__release
-  local.get $35
-  call $~lib/rt/pure/__release
-  local.get $36
-  call $~lib/rt/pure/__release
-  local.get $37
-  call $~lib/rt/pure/__release
-  local.get $38
-  call $~lib/rt/pure/__release
-  local.get $39
-  call $~lib/rt/pure/__release
-  local.get $40
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 17912
+  i32.gt_u
+  if
+   local.get $211
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/string/getString (result i32)
   global.get $std/string/str
diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat
index c409be3275..c2369a4265 100644
--- a/tests/compiler/std/string.untouched.wat
+++ b/tests/compiler/std/string.untouched.wat
@@ -6,18 +6,24 @@
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $none_=>_none (func))
- (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_=>_f64 (func (param i32) (result f64)))
+ (type $i64_i32_=>_f64 (func (param i64 i32) (result f64)))
+ (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
- (type $i32_=>_f64 (func (param i32) (result f64)))
  (type $i32_i32_=>_f64 (func (param i32 i32) (result f64)))
- (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i32_=>_i64 (func (param i64 i32) (result i64)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $f64_i32_=>_f64 (func (param f64 i32) (result f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -726,6 +732,69 @@
   call $~lib/rt/pure/__release
   local.get $1
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -734,9 +803,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -749,7 +815,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -776,7 +842,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -830,7 +896,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -855,77 +921,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -942,6 +966,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -953,8 +983,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -962,7 +990,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -979,28 +1007,18 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -1011,44 +1029,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -1056,30 +1064,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 352
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -1098,22 +1102,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -1139,7 +1143,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1151,18 +1155,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 352
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -1216,27 +1220,15 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -1251,24 +1243,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -1278,31 +1256,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -1310,8 +1272,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -1337,24 +1297,22 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -1362,7 +1320,7 @@
    if
     i32.const 0
     i32.const 352
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -1370,16 +1328,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -1395,7 +1353,7 @@
    if
     i32.const 0
     i32.const 352
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -1404,8 +1362,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -1416,49 +1374,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -1471,10 +1425,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -1524,73 +1474,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1603,11 +1526,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1627,7 +1550,7 @@
   if
    i32.const 400
    i32.const 352
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1653,9 +1576,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1723,31 +1643,24 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1760,79 +1673,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 352
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1869,9 +1751,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1885,12 +1765,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1900,7 +1780,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1937,7 +1817,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1988,29 +1868,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -2030,7 +1890,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -2077,7 +1937,7 @@
      if
       i32.const 0
       i32.const 352
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -2098,7 +1958,7 @@
     if
      i32.const 0
      i32.const 352
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -2119,7 +1979,7 @@
   if
    i32.const 0
    i32.const 352
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -3533,246 +3393,241 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
-  end
- )
- (func $~lib/memory/memory.repeat (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  i32.const 0
-  local.set $4
-  local.get $2
-  local.get $3
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
+  end
+ )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
+ (func $~lib/memory/memory.repeat (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  i32.const 0
+  local.set $4
+  local.get $2
+  local.get $3
   i32.mul
   local.set $5
   loop $while-continue|0
@@ -5406,6 +5261,162 @@
   call $~lib/rt/pure/__release
   local.get $2
  )
+ (func $~lib/util/string/parseExp (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  i32.const 1
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  i32.load16_u
+  local.set $4
+  local.get $4
+  i32.const 32
+  i32.or
+  i32.const 101
+  i32.ne
+  if
+   i32.const 0
+   return
+  end
+  local.get $0
+  i32.const 2
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $4
+  local.get $4
+  i32.const 45
+  i32.eq
+  if
+   local.get $1
+   i32.const 1
+   i32.sub
+   local.tee $1
+   i32.eqz
+   if
+    i32.const 0
+    return
+   end
+   local.get $0
+   i32.const 2
+   i32.add
+   local.tee $0
+   i32.load16_u
+   local.set $4
+   i32.const -1
+   local.set $2
+  else
+   local.get $4
+   i32.const 43
+   i32.eq
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.tee $1
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $0
+    i32.const 2
+    i32.add
+    local.tee $0
+    i32.load16_u
+    local.set $4
+   end
+  end
+  loop $while-continue|0
+   local.get $4
+   i32.const 48
+   i32.eq
+   local.set $5
+   local.get $5
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.tee $1
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $0
+    i32.const 2
+    i32.add
+    local.tee $0
+    i32.load16_u
+    local.set $4
+    br $while-continue|0
+   end
+  end
+  local.get $4
+  i32.const 48
+  i32.sub
+  local.set $5
+  loop $for-loop|1
+   local.get $1
+   if (result i32)
+    local.get $5
+    i32.const 10
+    i32.lt_u
+   else
+    i32.const 0
+   end
+   local.set $6
+   local.get $6
+   if
+    local.get $3
+    i32.const 3200
+    i32.ge_s
+    if
+     local.get $2
+     i32.const 3200
+     i32.mul
+     return
+    end
+    i32.const 10
+    local.get $3
+    i32.mul
+    local.get $5
+    i32.add
+    local.set $3
+    local.get $0
+    i32.const 2
+    i32.add
+    local.tee $0
+    i32.load16_u
+    local.set $4
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $4
+    i32.const 48
+    i32.sub
+    local.set $5
+    br $for-loop|1
+   end
+  end
+  local.get $2
+  local.get $3
+  i32.mul
+ )
+ (func $~lib/util/string/pow10 (param $0 i32) (result f64)
+  i32.const 1992
+  local.get $0
+  i32.const 3
+  i32.shl
+  i32.add
+  f64.load
+ )
  (func $~lib/math/ipow32 (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -5698,181 +5709,503 @@
   f64.reinterpret_i64
   f64.mul
  )
- (func $~lib/util/string/strtod (param $0 i32) (result f64)
-  (local $1 i32)
-  (local $2 f64)
+ (func $~lib/util/string/scaledown (param $0 i64) (param $1 i32) (result f64)
+  (local $2 i64)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 i32)
-  (local $17 i32)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  (local $9 i64)
+  (local $10 i64)
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
+  i64.clz
+  local.set $2
   local.get $0
-  call $~lib/string/String#get:length
-  local.set $1
+  local.get $2
+  i64.shl
+  local.set $0
   local.get $1
-  i32.eqz
-  if
-   f64.const nan:0x8000000000000
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $0
-  local.set $3
-  local.get $3
-  i32.load16_u
-  local.set $4
-  f64.const 1
-  local.set $5
-  loop $while-continue|0
+  i64.extend_i32_s
+  local.get $2
+  i64.sub
+  local.set $2
+  loop $for-loop|0
    local.get $1
-   if (result i32)
-    local.get $4
-    call $~lib/util/string/isSpace
-   else
-    i32.const 0
-   end
-   local.set $6
-   local.get $6
+   i32.const -14
+   i32.le_s
+   local.set $3
+   local.get $3
    if
-    local.get $3
-    i32.const 2
-    i32.add
-    local.tee $3
-    i32.load16_u
+    local.get $0
+    i64.const 6103515625
+    i64.div_u
     local.set $4
-    local.get $1
-    i32.const 1
-    i32.sub
-    local.set $1
-    br $while-continue|0
-   end
-  end
-  local.get $1
-  i32.eqz
-  if
-   f64.const nan:0x8000000000000
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $4
-  i32.const 45
-  i32.eq
-  if
-   local.get $1
-   i32.const 1
-   i32.sub
-   local.tee $1
-   i32.eqz
-   if
-    f64.const nan:0x8000000000000
-    local.set $2
     local.get $0
-    call $~lib/rt/pure/__release
+    i64.const 6103515625
+    i64.rem_u
+    local.set $5
+    local.get $4
+    i64.clz
+    local.set $6
+    local.get $4
+    local.get $6
+    i64.shl
+    f64.const 0.00004294967296
+    local.get $5
+    local.get $6
+    i64.const 18
+    i64.sub
+    i64.shl
+    f64.convert_i64_u
+    f64.mul
+    f64.nearest
+    i64.trunc_f64_u
+    i64.add
+    local.set $0
     local.get $2
-    return
+    local.get $6
+    i64.sub
+    local.set $2
+    local.get $1
+    i32.const 14
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
+  end
+  i32.const 5
+  i32.const 0
+  local.get $1
+  i32.sub
+  call $~lib/math/ipow32
+  i64.extend_i32_s
+  local.set $7
+  local.get $0
+  local.get $7
+  i64.div_u
+  local.set $8
+  local.get $0
+  local.get $7
+  i64.rem_u
+  local.set $9
+  local.get $8
+  i64.clz
+  local.set $10
+  local.get $8
+  local.get $10
+  i64.shl
+  local.get $9
+  f64.convert_i64_u
+  i64.reinterpret_f64
+  local.get $10
+  i64.const 52
+  i64.shl
+  i64.add
+  f64.reinterpret_i64
+  local.get $7
+  f64.convert_i64_u
+  f64.div
+  i64.trunc_f64_u
+  i64.add
+  local.set $0
+  local.get $2
+  local.get $10
+  i64.sub
+  local.set $2
+  local.get $0
+  f64.convert_i64_u
+  local.get $2
+  i32.wrap_i64
+  call $~lib/math/NativeMath.scalbn
+ )
+ (func $~lib/util/string/fixmul (param $0 i64) (param $1 i32) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.get $1
+  i64.extend_i32_u
+  i64.mul
+  local.set $2
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.get $1
+  i64.extend_i32_u
+  i64.mul
+  local.get $2
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $3
+  local.get $3
+  i64.const 32
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $4
+  i32.clz
+  local.set $5
+  i64.const 32
+  local.get $5
+  i64.extend_i32_u
+  i64.sub
+  local.set $6
+  global.get $~lib/util/string/__fixmulShift
+  local.get $6
+  i64.add
+  global.set $~lib/util/string/__fixmulShift
+  local.get $3
+  local.get $5
+  i64.extend_i32_u
+  i64.shl
+  local.get $2
+  i64.const 4294967295
+  i64.and
+  local.get $6
+  i64.shr_u
+  i64.or
+  local.get $2
+  local.get $5
+  i64.extend_i32_u
+  i64.shl
+  i64.const 31
+  i64.shr_u
+  i64.const 1
+  i64.and
+  i64.add
+ )
+ (func $~lib/util/string/scaleup (param $0 i64) (param $1 i32) (result f64)
+  (local $2 i64)
+  (local $3 i32)
+  local.get $0
+  i64.ctz
+  local.set $2
+  local.get $0
+  local.get $2
+  i64.shr_u
+  local.set $0
+  local.get $2
+  local.get $1
+  i64.extend_i32_s
+  i64.add
+  local.set $2
+  local.get $2
+  global.set $~lib/util/string/__fixmulShift
+  loop $for-loop|0
+   local.get $1
+   i32.const 13
+   i32.ge_s
+   local.set $3
    local.get $3
-   i32.const 2
-   i32.add
-   local.tee $3
-   i32.load16_u
-   local.set $4
-   f64.const -1
-   local.set $5
-  else
-   local.get $4
-   i32.const 43
-   i32.eq
    if
+    local.get $0
+    i32.const 1220703125
+    call $~lib/util/string/fixmul
+    local.set $0
     local.get $1
-    i32.const 1
+    i32.const 13
     i32.sub
-    local.tee $1
-    i32.eqz
-    if
-     f64.const nan:0x8000000000000
-     local.set $2
-     local.get $0
-     call $~lib/rt/pure/__release
-     local.get $2
-     return
-    end
-    local.get $3
-    i32.const 2
-    i32.add
-    local.tee $3
-    i32.load16_u
-    local.set $4
+    local.set $1
+    br $for-loop|0
    end
   end
+  local.get $0
+  i32.const 5
   local.get $1
-  i32.const 8
-  i32.ge_s
+  call $~lib/math/ipow32
+  call $~lib/util/string/fixmul
+  local.set $0
+  global.get $~lib/util/string/__fixmulShift
+  local.set $2
+  local.get $0
+  f64.convert_i64_u
+  local.get $2
+  i32.wrap_i64
+  call $~lib/math/NativeMath.scalbn
+ )
+ (func $~lib/util/string/scientific (param $0 i64) (param $1 i32) (result f64)
+  (local $2 f64)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i64.const 0
+  i64.ne
+  i32.eqz
   if (result i32)
-   local.get $4
-   i32.const 73
-   i32.eq
+   i32.const 1
   else
-   i32.const 0
+   local.get $1
+   i32.const -342
+   i32.lt_s
   end
   if
-   local.get $3
-   i64.load
-   i64.const 29555310648492105
-   i64.eq
-   if (result i32)
-    local.get $3
-    i64.load offset=8
-    i64.const 34058970405077102
-    i64.eq
-   else
-    i32.const 0
-   end
-   if
-    f64.const inf
-    local.get $5
-    f64.copysign
-    local.set $2
-    local.get $0
-    call $~lib/rt/pure/__release
-    local.get $2
-    return
-   end
-   f64.const nan:0x8000000000000
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
+   f64.const 0
+   return
+  end
+  local.get $1
+  i32.const 308
+  i32.gt_s
+  if
+   f64.const inf
+   return
+  end
+  local.get $0
+  f64.convert_i64_u
+  local.set $2
+  local.get $1
+  i32.eqz
+  if
    local.get $2
    return
   end
-  local.get $4
-  i32.const 46
+  local.get $1
+  i32.const 22
+  i32.gt_s
+  if (result i32)
+   local.get $1
+   i32.const 22
+   i32.const 15
+   i32.add
+   i32.le_s
+  else
+   i32.const 0
+  end
+  if
+   local.get $2
+   local.get $1
+   i32.const 22
+   i32.sub
+   call $~lib/util/string/pow10
+   f64.mul
+   local.set $2
+   i32.const 22
+   local.set $1
+  end
+  local.get $0
+  i64.const 9007199254740991
+  i64.le_u
+  if (result i32)
+   local.get $1
+   local.tee $3
+   i32.const 31
+   i32.shr_s
+   local.tee $4
+   local.get $3
+   i32.add
+   local.get $4
+   i32.xor
+   i32.const 22
+   i32.le_s
+  else
+   i32.const 0
+  end
+  if
+   local.get $1
+   i32.const 0
+   i32.gt_s
+   if
+    local.get $2
+    local.get $1
+    call $~lib/util/string/pow10
+    f64.mul
+    return
+   end
+   local.get $2
+   i32.const 0
+   local.get $1
+   i32.sub
+   call $~lib/util/string/pow10
+   f64.div
+   return
+  else
+   local.get $1
+   i32.const 0
+   i32.lt_s
+   if
+    local.get $0
+    local.get $1
+    call $~lib/util/string/scaledown
+    return
+   else
+    local.get $0
+    local.get $1
+    call $~lib/util/string/scaleup
+    return
+   end
+   unreachable
+  end
+  unreachable
+ )
+ (func $~lib/util/string/strtod (param $0 i32) (result f64)
+  (local $1 i32)
+  (local $2 f64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i64)
+  (local $12 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $1
+  local.get $1
+  i32.eqz
+  if
+   f64.const nan:0x8000000000000
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $2
+   return
+  end
+  local.get $0
+  local.set $3
+  local.get $3
+  i32.load16_u
+  local.set $4
+  f64.const 1
+  local.set $5
+  loop $while-continue|0
+   local.get $1
+   if (result i32)
+    local.get $4
+    call $~lib/util/string/isSpace
+   else
+    i32.const 0
+   end
+   local.set $6
+   local.get $6
+   if
+    local.get $3
+    i32.const 2
+    i32.add
+    local.tee $3
+    i32.load16_u
+    local.set $4
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    br $while-continue|0
+   end
+  end
+  local.get $1
+  i32.eqz
+  if
+   f64.const nan:0x8000000000000
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $2
+   return
+  end
+  local.get $4
+  i32.const 45
+  i32.eq
+  if
+   local.get $1
+   i32.const 1
+   i32.sub
+   local.tee $1
+   i32.eqz
+   if
+    f64.const nan:0x8000000000000
+    local.set $2
+    local.get $0
+    call $~lib/rt/pure/__release
+    local.get $2
+    return
+   end
+   local.get $3
+   i32.const 2
+   i32.add
+   local.tee $3
+   i32.load16_u
+   local.set $4
+   f64.const -1
+   local.set $5
+  else
+   local.get $4
+   i32.const 43
+   i32.eq
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.tee $1
+    i32.eqz
+    if
+     f64.const nan:0x8000000000000
+     local.set $2
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $2
+     return
+    end
+    local.get $3
+    i32.const 2
+    i32.add
+    local.tee $3
+    i32.load16_u
+    local.set $4
+   end
+  end
+  local.get $1
+  i32.const 8
+  i32.ge_s
+  if (result i32)
+   local.get $4
+   i32.const 73
+   i32.eq
+  else
+   i32.const 0
+  end
+  if
+   local.get $3
+   i64.load
+   i64.const 29555310648492105
+   i64.eq
+   if (result i32)
+    local.get $3
+    i64.load offset=8
+    i64.const 34058970405077102
+    i64.eq
+   else
+    i32.const 0
+   end
+   if
+    f64.const inf
+    local.get $5
+    f64.copysign
+    local.set $2
+    local.get $0
+    call $~lib/rt/pure/__release
+    local.get $2
+    return
+   end
+   f64.const nan:0x8000000000000
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $2
+   return
+  end
+  local.get $4
+  i32.const 46
   i32.ne
   if (result i32)
    local.get $4
@@ -6112,2305 +6445,767 @@
    local.get $9
    local.set $10
   end
-  block $~lib/util/string/scientific|inlined.0 (result f64)
-   local.get $11
-   local.set $18
-   local.get $10
-   i32.const 19
-   local.tee $6
-   local.get $9
-   local.tee $12
-   local.get $6
-   local.get $12
-   i32.lt_s
-   select
-   i32.sub
-   block $~lib/util/string/parseExp|inlined.0 (result i32)
-    local.get $3
-    local.set $6
-    local.get $1
-    local.set $12
-    i32.const 1
-    local.set $13
-    i32.const 0
-    local.set $14
-    local.get $6
-    i32.load16_u
-    local.set $15
-    local.get $15
-    i32.const 32
-    i32.or
-    i32.const 101
-    i32.ne
-    if
-     i32.const 0
-     br $~lib/util/string/parseExp|inlined.0
-    end
-    local.get $6
-    i32.const 2
-    i32.add
-    local.tee $6
-    i32.load16_u
-    local.set $15
-    local.get $15
-    i32.const 45
-    i32.eq
-    if
-     local.get $12
-     i32.const 1
-     i32.sub
-     local.tee $12
-     i32.eqz
-     if
-      i32.const 0
-      br $~lib/util/string/parseExp|inlined.0
-     end
-     local.get $6
-     i32.const 2
-     i32.add
-     local.tee $6
-     i32.load16_u
-     local.set $15
-     i32.const -1
-     local.set $13
-    else
-     local.get $15
-     i32.const 43
-     i32.eq
-     if
-      local.get $12
-      i32.const 1
-      i32.sub
-      local.tee $12
-      i32.eqz
-      if
-       i32.const 0
-       br $~lib/util/string/parseExp|inlined.0
-      end
-      local.get $6
-      i32.const 2
-      i32.add
-      local.tee $6
-      i32.load16_u
-      local.set $15
-     end
-    end
-    loop $while-continue|4
-     local.get $15
-     i32.const 48
-     i32.eq
-     local.set $16
-     local.get $16
-     if
-      local.get $12
-      i32.const 1
-      i32.sub
-      local.tee $12
-      i32.eqz
-      if
-       i32.const 0
-       br $~lib/util/string/parseExp|inlined.0
-      end
-      local.get $6
-      i32.const 2
-      i32.add
-      local.tee $6
-      i32.load16_u
-      local.set $15
-      br $while-continue|4
-     end
-    end
-    local.get $15
-    i32.const 48
-    i32.sub
-    local.set $16
-    loop $for-loop|5
-     local.get $12
-     if (result i32)
-      local.get $16
-      i32.const 10
-      i32.lt_u
-     else
-      i32.const 0
-     end
-     local.set $17
-     local.get $17
-     if
-      local.get $14
-      i32.const 3200
-      i32.ge_s
-      if
-       local.get $13
-       i32.const 3200
-       i32.mul
-       br $~lib/util/string/parseExp|inlined.0
-      end
-      i32.const 10
-      local.get $14
-      i32.mul
-      local.get $16
-      i32.add
-      local.set $14
-      local.get $6
-      i32.const 2
-      i32.add
-      local.tee $6
-      i32.load16_u
-      local.set $15
-      local.get $12
-      i32.const 1
-      i32.sub
-      local.set $12
-      local.get $15
-      i32.const 48
-      i32.sub
-      local.set $16
-      br $for-loop|5
-     end
-    end
-    local.get $13
-    local.get $14
-    i32.mul
-   end
-   i32.add
-   local.set $17
-   local.get $18
-   i64.const 0
-   i64.ne
-   i32.eqz
-   if (result i32)
-    i32.const 1
-   else
-    local.get $17
-    i32.const -342
-    i32.lt_s
-   end
-   if
-    f64.const 0
-    br $~lib/util/string/scientific|inlined.0
-   end
-   local.get $17
-   i32.const 308
-   i32.gt_s
-   if
-    f64.const inf
-    br $~lib/util/string/scientific|inlined.0
-   end
-   local.get $18
-   f64.convert_i64_u
-   local.set $2
-   local.get $17
-   i32.eqz
-   if
-    local.get $2
-    br $~lib/util/string/scientific|inlined.0
-   end
-   local.get $17
-   i32.const 22
-   i32.gt_s
-   if (result i32)
-    local.get $17
-    i32.const 22
-    i32.const 15
-    i32.add
-    i32.le_s
-   else
-    i32.const 0
-   end
-   if
-    local.get $2
-    local.get $17
-    i32.const 22
-    i32.sub
-    local.set $16
-    i32.const 1992
-    local.get $16
-    i32.const 3
-    i32.shl
-    i32.add
-    f64.load
-    f64.mul
-    local.set $2
-    i32.const 22
-    local.set $17
-   end
-   local.get $18
-   i64.const 9007199254740991
-   i64.le_u
-   if (result i32)
-    local.get $17
-    local.tee $16
-    i32.const 31
-    i32.shr_s
-    local.tee $15
-    local.get $16
-    i32.add
-    local.get $15
-    i32.xor
-    i32.const 22
-    i32.le_s
-   else
-    i32.const 0
-   end
-   if
-    local.get $17
-    i32.const 0
-    i32.gt_s
-    if
-     local.get $2
-     local.get $17
-     local.set $12
-     i32.const 1992
-     local.get $12
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     f64.mul
-     br $~lib/util/string/scientific|inlined.0
-    end
-    local.get $2
-    i32.const 0
-    local.get $17
-    i32.sub
-    local.set $6
-    i32.const 1992
-    local.get $6
-    i32.const 3
-    i32.shl
-    i32.add
-    f64.load
-    f64.div
-    br $~lib/util/string/scientific|inlined.0
-   else
-    local.get $17
-    i32.const 0
-    i32.lt_s
-    if
-     local.get $18
-     local.set $19
-     local.get $17
-     local.set $13
-     local.get $19
-     i64.clz
-     local.set $20
-     local.get $19
-     local.get $20
-     i64.shl
-     local.set $19
-     local.get $13
-     i64.extend_i32_s
-     local.get $20
-     i64.sub
-     local.set $20
-     loop $for-loop|6
-      local.get $13
-      i32.const -14
-      i32.le_s
-      local.set $6
-      local.get $6
-      if
-       local.get $19
-       i64.const 6103515625
-       i64.div_u
-       local.set $21
-       local.get $19
-       i64.const 6103515625
-       i64.rem_u
-       local.set $22
-       local.get $21
-       i64.clz
-       local.set $23
-       local.get $21
-       local.get $23
-       i64.shl
-       f64.const 0.00004294967296
-       local.get $22
-       local.get $23
-       i64.const 18
-       i64.sub
-       i64.shl
-       f64.convert_i64_u
-       f64.mul
-       f64.nearest
-       i64.trunc_f64_u
-       i64.add
-       local.set $19
-       local.get $20
-       local.get $23
-       i64.sub
-       local.set $20
-       local.get $13
-       i32.const 14
-       i32.add
-       local.set $13
-       br $for-loop|6
-      end
-     end
-     i32.const 5
-     i32.const 0
-     local.get $13
-     i32.sub
-     call $~lib/math/ipow32
-     i64.extend_i32_s
-     local.set $23
-     local.get $19
-     local.get $23
-     i64.div_u
-     local.set $22
-     local.get $19
-     local.get $23
-     i64.rem_u
-     local.set $21
-     local.get $22
-     i64.clz
-     local.set $24
-     local.get $22
-     local.get $24
-     i64.shl
-     local.get $21
-     f64.convert_i64_u
-     i64.reinterpret_f64
-     local.get $24
-     i64.const 52
-     i64.shl
-     i64.add
-     f64.reinterpret_i64
-     local.get $23
-     f64.convert_i64_u
-     f64.div
-     i64.trunc_f64_u
-     i64.add
-     local.set $19
-     local.get $20
-     local.get $24
-     i64.sub
-     local.set $20
-     local.get $19
-     f64.convert_i64_u
-     local.get $20
-     i32.wrap_i64
-     call $~lib/math/NativeMath.scalbn
-     br $~lib/util/string/scientific|inlined.0
-    else
-     local.get $18
-     local.set $19
-     local.get $17
-     local.set $14
-     local.get $19
-     i64.ctz
-     local.set $24
-     local.get $19
-     local.get $24
-     i64.shr_u
-     local.set $19
-     local.get $24
-     local.get $14
-     i64.extend_i32_s
-     i64.add
-     local.set $24
-     local.get $24
-     global.set $~lib/util/string/__fixmulShift
-     loop $for-loop|7
-      local.get $14
-      i32.const 13
-      i32.ge_s
-      local.set $13
-      local.get $13
-      if
-       local.get $19
-       local.set $20
-       i32.const 1220703125
-       local.set $15
-       local.get $20
-       i64.const 4294967295
-       i64.and
-       local.get $15
-       i64.extend_i32_u
-       i64.mul
-       local.set $21
-       local.get $20
-       i64.const 32
-       i64.shr_u
-       local.get $15
-       i64.extend_i32_u
-       i64.mul
-       local.get $21
-       i64.const 32
-       i64.shr_u
-       i64.add
-       local.set $22
-       local.get $22
-       i64.const 32
-       i64.shr_u
-       i32.wrap_i64
-       local.set $6
-       local.get $6
-       i32.clz
-       local.set $12
-       i64.const 32
-       local.get $12
-       i64.extend_i32_u
-       i64.sub
-       local.set $23
-       global.get $~lib/util/string/__fixmulShift
-       local.get $23
-       i64.add
-       global.set $~lib/util/string/__fixmulShift
-       local.get $22
-       local.get $12
-       i64.extend_i32_u
-       i64.shl
-       local.get $21
-       i64.const 4294967295
-       i64.and
-       local.get $23
-       i64.shr_u
-       i64.or
-       local.get $21
-       local.get $12
-       i64.extend_i32_u
-       i64.shl
-       i64.const 31
-       i64.shr_u
-       i64.const 1
-       i64.and
-       i64.add
-       local.set $19
-       local.get $14
-       i32.const 13
-       i32.sub
-       local.set $14
-       br $for-loop|7
-      end
-     end
-     local.get $19
-     local.set $20
-     i32.const 5
-     local.get $14
-     call $~lib/math/ipow32
-     local.set $16
-     local.get $20
-     i64.const 4294967295
-     i64.and
-     local.get $16
-     i64.extend_i32_u
-     i64.mul
-     local.set $23
-     local.get $20
-     i64.const 32
-     i64.shr_u
-     local.get $16
-     i64.extend_i32_u
-     i64.mul
-     local.get $23
-     i64.const 32
-     i64.shr_u
-     i64.add
-     local.set $22
-     local.get $22
-     i64.const 32
-     i64.shr_u
-     i32.wrap_i64
-     local.set $13
-     local.get $13
-     i32.clz
-     local.set $12
-     i64.const 32
-     local.get $12
-     i64.extend_i32_u
-     i64.sub
-     local.set $21
-     global.get $~lib/util/string/__fixmulShift
-     local.get $21
-     i64.add
-     global.set $~lib/util/string/__fixmulShift
-     local.get $22
-     local.get $12
-     i64.extend_i32_u
-     i64.shl
-     local.get $23
-     i64.const 4294967295
-     i64.and
-     local.get $21
-     i64.shr_u
-     i64.or
-     local.get $23
-     local.get $12
-     i64.extend_i32_u
-     i64.shl
-     i64.const 31
-     i64.shr_u
-     i64.const 1
-     i64.and
-     i64.add
-     local.set $19
-     global.get $~lib/util/string/__fixmulShift
-     local.set $24
-     local.get $19
-     f64.convert_i64_u
-     local.get $24
-     i32.wrap_i64
-     call $~lib/math/NativeMath.scalbn
-     br $~lib/util/string/scientific|inlined.0
-    end
-    unreachable
-   end
-   unreachable
-  end
-  local.get $5
-  f64.copysign
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/parseFloat (param $0 i32) (result f64)
-  (local $1 f64)
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $0
-  call $~lib/util/string/strtod
-  local.set $1
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
- )
- (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
-  i32.const 0
-  i32.eq
-  if
-   i32.const 640
-   local.tee $2
-   local.get $1
-   local.tee $3
-   i32.ne
-   if
-    local.get $2
-    call $~lib/rt/pure/__retain
-    local.set $2
-    local.get $3
-    call $~lib/rt/pure/__release
-   end
-   local.get $2
-   local.set $1
-  end
-  local.get $0
-  call $~lib/string/String#get:length
-  i32.const 1
-  i32.shl
-  local.set $4
-  local.get $1
-  call $~lib/string/String#get:length
-  i32.const 1
-  i32.shl
-  local.set $5
-  local.get $4
-  local.get $5
-  i32.add
-  local.set $6
-  local.get $6
-  i32.const 0
-  i32.eq
-  if
-   i32.const 272
-   call $~lib/rt/pure/__retain
-   local.set $2
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $6
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/pure/__retain
-  local.set $7
-  local.get $7
-  local.get $0
-  local.get $4
-  call $~lib/memory/memory.copy
-  local.get $7
-  local.get $4
-  i32.add
-  local.get $1
-  local.get $5
-  call $~lib/memory/memory.copy
-  local.get $7
-  local.set $2
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  i32.const 640
-  local.get $0
-  i32.const 0
-  i32.ne
-  select
-  local.get $1
-  call $~lib/string/String#concat
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/String.__ne (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  local.get $1
-  call $~lib/string/String.__eq
-  i32.eqz
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/String.__gt (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  local.get $1
-  i32.eq
-  if (result i32)
-   i32.const 1
-  else
-   local.get $0
-   i32.const 0
-   i32.eq
-  end
-  if (result i32)
-   i32.const 1
-  else
-   local.get $1
-   i32.const 0
-   i32.eq
-  end
-  if
-   i32.const 0
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $0
-  call $~lib/string/String#get:length
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   i32.const 0
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $1
-  call $~lib/string/String#get:length
-  local.set $4
-  local.get $4
-  i32.eqz
-  if
-   i32.const 1
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $0
-  i32.const 0
-  local.get $1
-  i32.const 0
-  local.get $3
-  local.tee $2
-  local.get $4
-  local.tee $5
-  local.get $2
-  local.get $5
-  i32.lt_s
-  select
-  call $~lib/util/string/compareImpl
-  i32.const 0
-  i32.gt_s
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/String.__lt (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  local.get $1
-  i32.eq
-  if (result i32)
-   i32.const 1
-  else
-   local.get $0
-   i32.const 0
-   i32.eq
-  end
-  if (result i32)
-   i32.const 1
-  else
-   local.get $1
-   i32.const 0
-   i32.eq
-  end
-  if
-   i32.const 0
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $1
-  call $~lib/string/String#get:length
-  local.set $3
-  local.get $3
-  i32.eqz
-  if
-   i32.const 0
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $0
-  call $~lib/string/String#get:length
-  local.set $4
-  local.get $4
-  i32.eqz
-  if
-   i32.const 1
-   local.set $2
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   return
-  end
-  local.get $0
-  i32.const 0
-  local.get $1
-  i32.const 0
-  local.get $4
-  local.tee $2
-  local.get $3
-  local.tee $5
-  local.get $2
-  local.get $5
-  i32.lt_s
-  select
-  call $~lib/util/string/compareImpl
-  i32.const 0
-  i32.lt_s
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/String.__gte (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  local.get $1
-  call $~lib/string/String.__lt
-  i32.eqz
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/String.__lte (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  local.get $1
-  call $~lib/string/String.__gt
-  i32.eqz
-  local.set $2
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/string/String#repeat (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  local.get $0
-  call $~lib/string/String#get:length
-  local.set $2
-  local.get $1
-  i32.const 0
-  i32.lt_s
-  if (result i32)
-   i32.const 1
-  else
-   local.get $2
-   i64.extend_i32_s
-   local.get $1
-   i64.extend_i32_s
-   i64.mul
-   i64.const 1
-   i64.const 28
-   i64.shl
-   i64.gt_u
-  end
-  if
-   i32.const 10864
-   i32.const 528
-   i32.const 322
-   i32.const 7
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 0
-  i32.eq
-  if (result i32)
-   i32.const 1
-  else
-   local.get $2
-   i32.eqz
-  end
-  if
-   i32.const 272
-   call $~lib/rt/pure/__retain
-   return
-  end
-  local.get $1
-  i32.const 1
-  i32.eq
-  if
-   local.get $0
-   call $~lib/rt/pure/__retain
-   return
-  end
-  local.get $2
-  local.get $1
-  i32.mul
-  i32.const 1
-  i32.shl
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.set $3
-  local.get $3
-  local.get $0
-  local.get $2
-  i32.const 1
-  i32.shl
-  local.get $1
-  call $~lib/memory/memory.repeat
-  local.get $3
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/string/String#replace (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $2
-  call $~lib/rt/pure/__retain
-  local.set $2
-  local.get $0
-  call $~lib/string/String#get:length
-  local.set $3
-  local.get $1
-  call $~lib/string/String#get:length
-  local.set $4
-  local.get $3
-  local.get $4
-  i32.le_u
-  if
-   local.get $3
-   local.get $4
-   i32.lt_u
-   if (result i32)
-    local.get $0
-    call $~lib/rt/pure/__retain
-   else
-    local.get $2
-    local.get $0
-    local.get $1
-    local.get $0
-    call $~lib/string/String.__eq
-    select
-    call $~lib/rt/pure/__retain
-   end
-   local.set $5
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $5
-   return
-  end
-  local.get $0
-  local.get $1
-  i32.const 0
-  call $~lib/string/String#indexOf
-  local.set $6
-  local.get $6
-  i32.const -1
-  i32.xor
-  if
-   local.get $2
-   call $~lib/string/String#get:length
-   local.set $5
-   local.get $3
-   local.get $4
-   i32.sub
-   local.set $3
-   local.get $3
-   local.get $5
-   i32.add
-   local.set $7
-   local.get $7
-   if
-    local.get $7
-    i32.const 1
-    i32.shl
-    i32.const 1
-    call $~lib/rt/tlsf/__alloc
-    local.set $8
-    local.get $8
-    local.get $0
-    local.get $6
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $8
-    local.get $6
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $2
-    local.get $5
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $8
-    local.get $6
-    local.get $5
-    i32.add
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $0
-    local.get $6
-    local.get $4
-    i32.add
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $3
-    local.get $6
-    i32.sub
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $8
-    call $~lib/rt/pure/__retain
-    local.set $9
-    local.get $1
-    call $~lib/rt/pure/__release
-    local.get $2
-    call $~lib/rt/pure/__release
-    local.get $9
-    return
-   end
-  end
-  local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $7
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $7
- )
- (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32)
-  (local $1 i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  local.set $1
-  local.get $0
-  i32.const 0
-  i32.ne
-  if (result i32)
-   local.get $0
-   i32.const 15
-   i32.and
-   i32.eqz
-  else
-   i32.const 0
-  end
-  if (result i32)
-   local.get $1
-   i32.load
-   i32.const 1
-   i32.and
-   i32.eqz
-  else
-   i32.const 0
-  end
-  if (result i32)
-   local.get $1
-   i32.load offset=4
-   i32.const 268435455
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.eqz
-  else
-   i32.const 0
-  end
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 352
-   i32.const 581
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
- )
- (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
-  (local $2 i32)
-  local.get $1
-  i32.load
-  local.set $2
-  local.get $1
-  local.get $2
-  i32.const 1
-  i32.or
-  i32.store
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/insertBlock
-  i32.const 1
-  drop
-  local.get $1
-  call $~lib/rt/rtrace/onfree
- )
- (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.set $3
-  local.get $1
-  i32.load
-  local.set $4
-  local.get $3
-  local.get $4
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.le_u
-  if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
-  end
-  local.get $1
-  local.set $5
-  local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
-  i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
-  local.set $6
-  local.get $6
-  i32.load
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.and
-  if
-   local.get $4
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.const 16
-   i32.add
-   local.get $7
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
-   local.set $5
-   local.get $5
-   local.get $3
-   i32.ge_u
-   if
-    local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $4
-    i32.const 3
-    i32.and
-    local.get $5
-    i32.or
-    i32.store
-    local.get $1
-    local.get $2
-    i32.store offset=12
-    local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
-   end
-  end
-  local.get $0
-  local.get $2
-  local.get $1
-  i32.load offset=8
-  call $~lib/rt/tlsf/allocateBlock
-  local.set $8
-  local.get $8
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $8
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
-  local.get $2
-  call $~lib/memory/memory.copy
-  local.get $1
-  global.get $~lib/heap/__heap_base
-  i32.ge_u
-  if
-   i32.const 1
-   drop
-   local.get $1
-   local.get $8
-   call $~lib/rt/rtrace/onrealloc
-   local.get $0
-   local.get $1
-   call $~lib/rt/tlsf/freeBlock
-  end
-  local.get $8
- )
- (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  local.get $0
-  call $~lib/rt/tlsf/checkUsedBlock
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
- )
- (func $~lib/string/String#replaceAll (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $2
-  call $~lib/rt/pure/__retain
-  local.set $2
-  local.get $0
-  call $~lib/string/String#get:length
-  local.set $3
-  local.get $1
-  call $~lib/string/String#get:length
-  local.set $4
-  local.get $3
-  local.get $4
-  i32.le_u
-  if
-   local.get $3
-   local.get $4
-   i32.lt_u
-   if (result i32)
-    local.get $0
-    call $~lib/rt/pure/__retain
-   else
-    local.get $2
-    local.get $0
-    local.get $1
-    local.get $0
-    call $~lib/string/String.__eq
-    select
-    call $~lib/rt/pure/__retain
-   end
-   local.set $5
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $5
-   return
-  end
-  local.get $2
-  call $~lib/string/String#get:length
-  local.set $6
-  local.get $4
-  i32.eqz
-  if
-   local.get $6
-   i32.eqz
-   if
-    local.get $0
-    call $~lib/rt/pure/__retain
-    local.set $5
-    local.get $1
-    call $~lib/rt/pure/__release
-    local.get $2
-    call $~lib/rt/pure/__release
-    local.get $5
-    return
-   end
-   local.get $3
-   local.get $3
-   i32.const 1
-   i32.add
-   local.get $6
-   i32.mul
-   i32.add
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.set $5
-   local.get $5
-   local.get $2
-   local.get $6
-   i32.const 1
-   i32.shl
-   call $~lib/memory/memory.copy
-   local.get $6
-   local.set $7
-   i32.const 0
-   local.set $8
-   loop $for-loop|0
-    local.get $8
-    local.get $3
-    i32.lt_u
-    local.set $9
-    local.get $9
-    if
-     local.get $5
-     local.get $7
-     local.tee $10
-     i32.const 1
-     i32.add
-     local.set $7
-     local.get $10
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $0
-     local.get $8
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     i32.store16
-     local.get $5
-     local.get $7
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $2
-     local.get $6
-     i32.const 1
-     i32.shl
-     call $~lib/memory/memory.copy
-     local.get $7
-     local.get $6
-     i32.add
-     local.set $7
-     local.get $8
-     i32.const 1
-     i32.add
-     local.set $8
-     br $for-loop|0
-    end
-   end
-   local.get $5
-   call $~lib/rt/pure/__retain
-   local.set $8
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $8
-   return
-  end
-  i32.const 0
-  local.set $11
-  i32.const 0
-  local.set $12
-  local.get $4
+  local.get $11
+  local.get $10
+  i32.const 19
+  local.tee $6
+  local.get $9
+  local.tee $12
   local.get $6
+  local.get $12
+  i32.lt_s
+  select
+  i32.sub
+  local.get $3
+  local.get $1
+  call $~lib/util/string/parseExp
+  i32.add
+  call $~lib/util/string/scientific
+  local.get $5
+  f64.copysign
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $2
+ )
+ (func $~lib/string/parseFloat (param $0 i32) (result f64)
+  (local $1 f64)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  call $~lib/util/string/strtod
+  local.set $1
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $1
+ )
+ (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $1
+  i32.const 0
   i32.eq
   if
-   local.get $3
-   i32.const 1
-   i32.shl
-   local.set $7
-   local.get $7
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.set $5
-   local.get $5
-   local.get $0
-   local.get $7
-   call $~lib/memory/memory.copy
-   loop $while-continue|1
-    local.get $0
-    local.get $1
-    local.get $11
-    call $~lib/string/String#indexOf
-    local.tee $12
-    i32.const -1
-    i32.xor
-    local.set $8
-    local.get $8
-    if
-     local.get $5
-     local.get $12
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $2
-     local.get $6
-     i32.const 1
-     i32.shl
-     call $~lib/memory/memory.copy
-     local.get $12
-     local.get $4
-     i32.add
-     local.set $11
-     br $while-continue|1
-    end
-   end
-   local.get $5
-   call $~lib/rt/pure/__retain
-   local.set $8
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $8
-   return
-  end
-  i32.const 0
-  local.set $13
-  i32.const 0
-  local.set $14
-  local.get $3
-  local.set $15
-  loop $while-continue|2
-   local.get $0
+   i32.const 640
+   local.tee $2
    local.get $1
-   local.get $11
-   call $~lib/string/String#indexOf
-   local.tee $12
-   i32.const -1
-   i32.xor
-   local.set $5
-   local.get $5
+   local.tee $3
+   i32.ne
    if
-    local.get $13
-    i32.eqz
-    if
-     local.get $3
-     i32.const 1
-     i32.shl
-     i32.const 1
-     call $~lib/rt/tlsf/__alloc
-     local.set $13
-    end
-    local.get $14
-    local.get $15
-    i32.gt_u
-    if
-     local.get $15
-     i32.const 1
-     i32.shl
-     local.set $7
-     local.get $13
-     local.get $7
-     i32.const 1
-     i32.shl
-     call $~lib/rt/tlsf/__realloc
-     local.set $13
-     local.get $7
-     local.set $15
-    end
-    local.get $12
-    local.get $11
-    i32.sub
-    local.set $7
-    local.get $13
-    local.get $14
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $0
-    local.get $11
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $7
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $14
-    local.get $7
-    i32.add
-    local.set $14
-    local.get $13
-    local.get $14
-    i32.const 1
-    i32.shl
-    i32.add
     local.get $2
-    local.get $6
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $14
-    local.get $6
-    i32.add
-    local.set $14
-    local.get $12
-    local.get $4
-    i32.add
-    local.set $11
-    br $while-continue|2
-   end
-  end
-  local.get $14
-  if
-   local.get $14
-   local.get $15
-   i32.gt_u
-   if
-    local.get $15
-    i32.const 1
-    i32.shl
-    local.set $5
-    local.get $13
-    local.get $5
-    i32.const 1
-    i32.shl
-    call $~lib/rt/tlsf/__realloc
-    local.set $13
-    local.get $5
-    local.set $15
-   end
-   local.get $3
-   local.get $11
-   i32.sub
-   local.set $5
-   local.get $5
-   if
-    local.get $13
-    local.get $14
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $0
-    local.get $11
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $5
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-   end
-   local.get $5
-   local.get $14
-   i32.add
-   local.set $5
-   local.get $15
-   local.get $5
-   i32.gt_u
-   if
-    local.get $13
-    local.get $5
-    i32.const 1
-    i32.shl
-    call $~lib/rt/tlsf/__realloc
-    local.set $13
+    call $~lib/rt/pure/__retain
+    local.set $2
+    local.get $3
+    call $~lib/rt/pure/__release
    end
-   local.get $13
+   local.get $2
+   local.set $1
+  end
+  local.get $0
+  call $~lib/string/String#get:length
+  i32.const 1
+  i32.shl
+  local.set $4
+  local.get $1
+  call $~lib/string/String#get:length
+  i32.const 1
+  i32.shl
+  local.set $5
+  local.get $4
+  local.get $5
+  i32.add
+  local.set $6
+  local.get $6
+  i32.const 0
+  i32.eq
+  if
+   i32.const 272
    call $~lib/rt/pure/__retain
-   local.set $8
+   local.set $2
    local.get $1
    call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/pure/__release
-   local.get $8
    return
   end
+  local.get $6
+  i32.const 1
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $7
+  local.get $0
+  local.get $4
+  call $~lib/memory/memory.copy
+  local.get $7
+  local.get $4
+  i32.add
+  local.get $1
+  local.get $5
+  call $~lib/memory/memory.copy
+  local.get $7
+  local.set $2
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+ )
+ (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  i32.const 640
+  local.get $0
+  i32.const 0
+  i32.ne
+  select
+  local.get $1
+  call $~lib/string/String#concat
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
   local.get $2
+ )
+ (func $~lib/string/String.__ne (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  call $~lib/string/String.__eq
+  i32.eqz
+  local.set $2
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
  )
- (func $~lib/string/String#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String.__gt (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
   local.get $0
-  call $~lib/string/String#get:length
-  local.set $3
+  call $~lib/rt/pure/__retain
+  local.set $0
   local.get $1
-  i32.const 0
-  i32.lt_s
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  i32.eq
   if (result i32)
-   local.get $1
-   local.get $3
-   i32.add
-   local.tee $4
+   i32.const 1
+  else
+   local.get $0
    i32.const 0
-   local.tee $5
-   local.get $4
-   local.get $5
-   i32.gt_s
-   select
+   i32.eq
+  end
+  if (result i32)
+   i32.const 1
   else
    local.get $1
-   local.tee $4
-   local.get $3
-   local.tee $5
-   local.get $4
-   local.get $5
-   i32.lt_s
-   select
+   i32.const 0
+   i32.eq
   end
-  local.set $1
-  local.get $2
-  i32.const 0
-  i32.lt_s
-  if (result i32)
-   local.get $2
-   local.get $3
-   i32.add
-   local.tee $4
+  if
    i32.const 0
-   local.tee $5
-   local.get $4
-   local.get $5
-   i32.gt_s
-   select
-  else
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $1
+   call $~lib/rt/pure/__release
    local.get $2
-   local.tee $4
-   local.get $3
-   local.tee $5
-   local.get $4
-   local.get $5
-   i32.lt_s
-   select
+   return
   end
-  local.set $2
-  local.get $2
-  local.get $1
-  i32.sub
+  local.get $0
+  call $~lib/string/String#get:length
   local.set $3
   local.get $3
-  i32.const 0
-  i32.le_s
+  i32.eqz
   if
-   i32.const 272
-   call $~lib/rt/pure/__retain
+   i32.const 0
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $2
+   return
+  end
+  local.get $1
+  call $~lib/string/String#get:length
+  local.set $4
+  local.get $4
+  i32.eqz
+  if
+   i32.const 1
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $2
    return
   end
-  local.get $3
-  i32.const 1
-  i32.shl
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $6
   local.get $0
+  i32.const 0
   local.get $1
-  i32.const 1
-  i32.shl
-  i32.add
+  i32.const 0
   local.get $3
-  i32.const 1
-  i32.shl
-  call $~lib/memory/memory.copy
-  local.get $6
-  call $~lib/rt/pure/__retain
+  local.tee $2
+  local.get $4
+  local.tee $5
+  local.get $2
+  local.get $5
+  i32.lt_s
+  select
+  call $~lib/util/string/compareImpl
+  i32.const 0
+  i32.gt_s
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
  )
- (func $~lib/string/String#substr (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String.__lt (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   i32.const 0
+   i32.eq
+  end
+  if (result i32)
+   i32.const 1
+  else
+   local.get $1
+   i32.const 0
+   i32.eq
+  end
+  if
+   i32.const 0
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $2
+   return
+  end
   local.get $1
-  local.set $3
-  local.get $2
-  local.set $4
-  local.get $0
   call $~lib/string/String#get:length
-  local.set $5
+  local.set $3
   local.get $3
-  i32.const 0
-  i32.lt_s
+  i32.eqz
   if
-   local.get $5
-   local.get $3
-   i32.add
-   local.tee $6
    i32.const 0
-   local.tee $7
-   local.get $6
-   local.get $7
-   i32.gt_s
-   select
-   local.set $3
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $2
+   return
   end
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $4
   local.get $4
-  local.tee $6
-  i32.const 0
-  local.tee $7
-  local.get $6
-  local.get $7
-  i32.gt_s
-  select
-  local.tee $6
-  local.get $5
-  local.get $3
-  i32.sub
-  local.tee $7
-  local.get $6
-  local.get $7
-  i32.lt_s
-  select
-  i32.const 1
-  i32.shl
-  local.set $8
-  local.get $8
-  i32.const 0
-  i32.le_s
+  i32.eqz
   if
-   i32.const 272
-   call $~lib/rt/pure/__retain
+   i32.const 1
+   local.set $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $2
    return
   end
-  local.get $8
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.set $9
-  local.get $9
-  local.get $0
-  local.get $3
-  i32.const 1
-  i32.shl
-  i32.add
-  local.get $8
-  call $~lib/memory/memory.copy
-  local.get $9
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $0
-  call $~lib/string/String#get:length
-  local.set $3
+  i32.const 0
   local.get $1
-  local.tee $4
   i32.const 0
-  local.tee $5
   local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.tee $4
+  local.tee $2
   local.get $3
   local.tee $5
-  local.get $4
-  local.get $5
-  i32.lt_s
-  select
-  local.set $6
   local.get $2
-  local.tee $4
-  i32.const 0
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  local.tee $4
-  local.get $3
-  local.tee $5
-  local.get $4
   local.get $5
   i32.lt_s
   select
-  local.set $7
-  local.get $6
-  local.tee $4
-  local.get $7
-  local.tee $5
-  local.get $4
-  local.get $5
+  call $~lib/util/string/compareImpl
+  i32.const 0
   i32.lt_s
-  select
-  i32.const 1
-  i32.shl
-  local.set $8
-  local.get $6
-  local.tee $4
-  local.get $7
-  local.tee $5
-  local.get $4
-  local.get $5
-  i32.gt_s
-  select
-  i32.const 1
-  i32.shl
-  local.set $9
-  local.get $9
-  local.get $8
-  i32.sub
-  local.set $10
-  local.get $10
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+ )
+ (func $~lib/string/String.__gte (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  call $~lib/string/String.__lt
+  i32.eqz
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+ )
+ (func $~lib/string/String.__lte (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  call $~lib/string/String.__gt
   i32.eqz
+  local.set $2
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+ )
+ (func $~lib/string/String#repeat (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $2
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  if (result i32)
+   i32.const 1
+  else
+   local.get $2
+   i64.extend_i32_s
+   local.get $1
+   i64.extend_i32_s
+   i64.mul
+   i64.const 1
+   i64.const 28
+   i64.shl
+   i64.gt_u
+  end
   if
-   i32.const 272
-   call $~lib/rt/pure/__retain
-   return
+   i32.const 10864
+   i32.const 528
+   i32.const 320
+   i32.const 7
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $8
-  i32.eqz
+  local.get $1
+  i32.const 0
+  i32.eq
   if (result i32)
-   local.get $9
-   local.get $3
    i32.const 1
-   i32.shl
-   i32.eq
   else
-   i32.const 0
+   local.get $2
+   i32.eqz
   end
   if
-   local.get $0
+   i32.const 272
    call $~lib/rt/pure/__retain
    return
   end
-  local.get $10
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.set $11
-  local.get $11
-  local.get $0
-  local.get $8
-  i32.add
-  local.get $10
-  call $~lib/memory/memory.copy
-  local.get $11
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  local.get $0
-  local.get $1
-  call $~lib/rt/tlsf/__alloc
-  local.set $3
-  local.get $2
+  local.get $1
+  i32.const 1
+  i32.eq
   if
-   local.get $3
-   local.get $2
    local.get $0
-   call $~lib/memory/memory.copy
+   call $~lib/rt/pure/__retain
+   return
   end
-  local.get $3
- )
- (func $~lib/rt/__allocArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  i32.const 16
   local.get $2
+  local.get $1
+  i32.mul
+  i32.const 1
+  i32.shl
+  i32.const 1
   call $~lib/rt/tlsf/__alloc
-  local.set $4
+  local.set $3
+  local.get $3
   local.get $0
-  local.get $1
+  local.get $2
+  i32.const 1
   i32.shl
-  local.set $5
-  local.get $5
-  i32.const 0
+  local.get $1
+  call $~lib/memory/memory.repeat
   local.get $3
-  call $~lib/rt/__allocBuffer
-  local.set $6
-  local.get $4
-  local.get $6
   call $~lib/rt/pure/__retain
-  i32.store
-  local.get $4
-  local.get $6
-  i32.store offset=4
-  local.get $4
-  local.get $5
-  i32.store offset=8
-  local.get $4
-  local.get $0
-  i32.store offset=12
-  local.get $4
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/string/String#replace (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
+  (local $9 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $2
+  call $~lib/rt/pure/__retain
+  local.set $2
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $3
+  local.get $1
+  call $~lib/string/String#get:length
+  local.set $4
+  local.get $3
+  local.get $4
+  i32.le_u
+  if
    local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
    local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
+   i32.lt_u
+   if (result i32)
+    local.get $0
+    call $~lib/rt/pure/__retain
+   else
+    local.get $2
+    local.get $0
+    local.get $1
+    local.get $0
+    call $~lib/string/String.__eq
+    select
+    call $~lib/rt/pure/__retain
    end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
+   local.set $5
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $2
+   call $~lib/rt/pure/__release
    local.get $5
-   local.get $7
-   i32.add
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.const 0
+  call $~lib/string/String#indexOf
+  local.set $6
+  local.get $6
+  i32.const -1
+  i32.xor
+  if
+   local.get $2
+   call $~lib/string/String#get:length
    local.set $5
    local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
    local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
    i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
+   local.set $3
    local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
    local.get $5
-   i32.const 4
-   i32.and
    i32.add
    local.set $7
-   local.get $5
    local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
+   if
+    local.get $7
+    i32.const 1
+    i32.shl
+    i32.const 1
+    call $~lib/rt/tlsf/__alloc
+    local.set $8
+    local.get $8
+    local.get $0
+    local.get $6
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $8
+    local.get $6
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $2
+    local.get $5
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $8
+    local.get $6
+    local.get $5
+    i32.add
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $6
+    local.get $4
+    i32.add
+    i32.const 1
+    i32.shl
+    i32.add
     local.get $3
-    i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
+    local.get $6
+    i32.sub
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $8
+    call $~lib/rt/pure/__retain
+    local.set $9
+    local.get $1
+    call $~lib/rt/pure/__release
+    local.get $2
+    call $~lib/rt/pure/__release
+    local.get $9
+    return
    end
   end
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+  call $~lib/rt/pure/__release
+  local.get $7
  )
- (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/rt/tlsf/checkUsedBlock (param $0 i32) (result i32)
+  (local $1 i32)
+  local.get $0
+  i32.const 16
+  i32.sub
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.ne
+  if (result i32)
+   local.get $0
+   i32.const 15
+   i32.and
+   i32.eqz
+  else
+   i32.const 0
+  end
+  if (result i32)
+   local.get $1
+   i32.load
+   i32.const 1
+   i32.and
+   i32.eqz
+  else
+   i32.const 0
+  end
+  if (result i32)
+   local.get $1
+   i32.load offset=4
+   i32.const 268435455
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.eqz
+  else
+   i32.const 0
+  end
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 352
+   i32.const 573
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+ )
+ (func $~lib/rt/tlsf/freeBlock (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  local.get $1
+  i32.load
+  local.set $2
+  local.get $1
+  local.get $2
+  i32.const 1
+  i32.or
+  i32.store
+  local.get $0
+  local.get $1
+  call $~lib/rt/tlsf/insertBlock
+  i32.const 1
+  drop
+  local.get $1
+  call $~lib/rt/rtrace/onfree
+ )
+ (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  local.get $0
-  i32.load offset=8
+  (local $7 i32)
+  (local $8 i32)
+  local.get $2
+  call $~lib/rt/tlsf/prepareSize
   local.set $3
   local.get $1
+  i32.load
+  local.set $4
   local.get $3
-  local.get $2
-  i32.shr_u
-  i32.gt_u
+  local.get $4
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.le_u
   if
-   local.get $1
-   i32.const 1073741808
-   local.get $2
-   i32.shr_u
-   i32.gt_u
-   if
-    i32.const 10864
-    i32.const 12128
-    i32.const 14
-    i32.const 48
-    call $~lib/builtins/abort
-    unreachable
-   end
    local.get $0
-   i32.load
-   local.set $4
+   local.get $1
+   local.get $3
+   call $~lib/rt/tlsf/prepareBlock
    local.get $1
    local.get $2
-   i32.shl
-   local.set $5
+   i32.store offset=12
+   local.get $1
+   return
+  end
+  local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
+  local.set $5
+  local.get $5
+  i32.load
+  local.set $6
+  local.get $6
+  i32.const 1
+  i32.and
+  if
    local.get $4
-   local.get $5
-   call $~lib/rt/tlsf/__realloc
-   local.set $6
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
+   i32.const 16
+   i32.add
    local.get $6
-   local.get $3
+   i32.const 3
+   i32.const -1
+   i32.xor
+   i32.and
    i32.add
-   i32.const 0
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
-   i32.sub
-   call $~lib/memory/memory.fill
-   local.get $6
-   local.get $4
-   i32.ne
+   i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $4
+    i32.const 3
+    i32.and
+    local.get $7
+    i32.or
     i32.store
+    local.get $1
+    local.get $2
+    i32.store offset=12
     local.get $0
-    local.get $6
-    i32.store offset=4
+    local.get $1
+    local.get $3
+    call $~lib/rt/tlsf/prepareBlock
+    local.get $1
+    return
    end
-   local.get $0
-   local.get $5
-   i32.store offset=8
   end
- )
- (func $~lib/array/Array<~lib/string/String>#push (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
-  i32.load offset=12
-  local.set $2
   local.get $2
-  i32.const 1
-  i32.add
-  local.set $3
-  local.get $0
-  local.get $3
-  i32.const 2
-  call $~lib/array/ensureSize
-  i32.const 1
-  drop
-  local.get $0
+  local.get $1
+  i32.load offset=8
+  call $~lib/rt/tlsf/allocateBlock
+  local.set $8
+  local.get $8
+  local.get $1
   i32.load offset=4
-  local.get $2
-  i32.const 2
-  i32.shl
+  i32.store offset=4
+  local.get $8
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.const 16
   i32.add
+  local.get $2
+  call $~lib/memory/memory.copy
   local.get $1
-  call $~lib/rt/pure/__retain
-  i32.store
+  global.get $~lib/heap/__heap_base
+  i32.ge_u
+  if
+   i32.const 1
+   drop
+   local.get $1
+   local.get $8
+   call $~lib/rt/rtrace/onrealloc
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/freeBlock
+  end
+  local.get $8
+ )
+ (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
-  local.get $3
-  i32.store offset=12
-  local.get $3
-  local.set $4
+  call $~lib/rt/tlsf/checkUsedBlock
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $4
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
  )
- (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/string/String#replaceAll (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -8423,2249 +7218,2951 @@
   (local $12 i32)
   (local $13 i32)
   (local $14 i32)
+  (local $15 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
   local.get $2
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 2
-   i32.const 3
-   i32.const 0
-   call $~lib/rt/__allocArray
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $3
-   return
-  end
+  call $~lib/rt/pure/__retain
+  local.set $2
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $3
   local.get $1
-  i32.const 0
-  i32.eq
+  call $~lib/string/String#get:length
+  local.set $4
+  local.get $3
+  local.get $4
+  i32.le_u
   if
-   i32.const 1
-   i32.const 2
-   i32.const 3
-   i32.const 0
-   call $~lib/rt/__allocArray
-   call $~lib/rt/pure/__retain
-   local.set $3
    local.get $3
-   i32.load offset=4
-   local.set $4
    local.get $4
-   local.get $0
-   call $~lib/rt/pure/__retain
-   i32.store
-   local.get $3
-   local.set $4
+   i32.lt_u
+   if (result i32)
+    local.get $0
+    call $~lib/rt/pure/__retain
+   else
+    local.get $2
+    local.get $0
+    local.get $1
+    local.get $0
+    call $~lib/string/String.__eq
+    select
+    call $~lib/rt/pure/__retain
+   end
+   local.set $5
    local.get $1
    call $~lib/rt/pure/__release
-   local.get $4
+   local.get $2
+   call $~lib/rt/pure/__release
+   local.get $5
    return
   end
-  local.get $0
-  call $~lib/string/String#get:length
-  local.set $5
-  local.get $1
+  local.get $2
   call $~lib/string/String#get:length
   local.set $6
-  local.get $2
-  i32.const 0
-  i32.lt_s
-  if
-   global.get $~lib/builtins/i32.MAX_VALUE
-   local.set $2
-  end
-  local.get $6
+  local.get $4
   i32.eqz
   if
-   local.get $5
+   local.get $6
    i32.eqz
    if
-    i32.const 0
-    i32.const 2
-    i32.const 3
-    i32.const 0
-    call $~lib/rt/__allocArray
+    local.get $0
     call $~lib/rt/pure/__retain
-    local.set $4
+    local.set $5
     local.get $1
     call $~lib/rt/pure/__release
-    local.get $4
+    local.get $2
+    call $~lib/rt/pure/__release
+    local.get $5
     return
    end
-   local.get $5
-   local.tee $4
-   local.get $2
-   local.tee $3
-   local.get $4
    local.get $3
-   i32.lt_s
-   select
+   local.get $3
+   i32.const 1
+   i32.add
+   local.get $6
+   i32.mul
+   i32.add
+   i32.const 1
+   i32.shl
+   i32.const 1
+   call $~lib/rt/tlsf/__alloc
    local.set $5
    local.get $5
-   i32.const 2
-   i32.const 3
-   i32.const 0
-   call $~lib/rt/__allocArray
-   call $~lib/rt/pure/__retain
-   local.set $4
-   local.get $4
-   i32.load offset=4
-   local.set $3
-   i32.const 0
+   local.get $2
+   local.get $6
+   i32.const 1
+   i32.shl
+   call $~lib/memory/memory.copy
+   local.get $6
    local.set $7
+   i32.const 0
+   local.set $8
    loop $for-loop|0
-    local.get $7
-    local.get $5
-    i32.lt_s
-    local.set $8
     local.get $8
+    local.get $3
+    i32.lt_u
+    local.set $9
+    local.get $9
     if
-     i32.const 2
+     local.get $5
+     local.get $7
+     local.tee $10
      i32.const 1
-     call $~lib/rt/tlsf/__alloc
-     local.set $9
-     local.get $9
+     i32.add
+     local.set $7
+     local.get $10
+     i32.const 1
+     i32.shl
+     i32.add
      local.get $0
-     local.get $7
+     local.get $8
      i32.const 1
      i32.shl
      i32.add
      i32.load16_u
      i32.store16
-     local.get $3
+     local.get $5
      local.get $7
-     i32.const 2
+     i32.const 1
      i32.shl
      i32.add
-     local.get $9
-     i32.store
+     local.get $2
+     local.get $6
      i32.const 1
-     drop
-     local.get $9
-     call $~lib/rt/pure/__retain
-     drop
+     i32.shl
+     call $~lib/memory/memory.copy
      local.get $7
-     i32.const 1
+     local.get $6
      i32.add
      local.set $7
+     local.get $8
+     i32.const 1
+     i32.add
+     local.set $8
      br $for-loop|0
     end
    end
-   local.get $4
+   local.get $5
+   call $~lib/rt/pure/__retain
+   local.set $8
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $2
+   call $~lib/rt/pure/__release
+   local.get $8
+   return
+  end
+  i32.const 0
+  local.set $11
+  i32.const 0
+  local.set $12
+  local.get $4
+  local.get $6
+  i32.eq
+  if
+   local.get $3
+   i32.const 1
+   i32.shl
    local.set $7
+   local.get $7
+   i32.const 1
+   call $~lib/rt/tlsf/__alloc
+   local.set $5
+   local.get $5
+   local.get $0
+   local.get $7
+   call $~lib/memory/memory.copy
+   loop $while-continue|1
+    local.get $0
+    local.get $1
+    local.get $11
+    call $~lib/string/String#indexOf
+    local.tee $12
+    i32.const -1
+    i32.xor
+    local.set $8
+    local.get $8
+    if
+     local.get $5
+     local.get $12
+     i32.const 1
+     i32.shl
+     i32.add
+     local.get $2
+     local.get $6
+     i32.const 1
+     i32.shl
+     call $~lib/memory/memory.copy
+     local.get $12
+     local.get $4
+     i32.add
+     local.set $11
+     br $while-continue|1
+    end
+   end
+   local.get $5
+   call $~lib/rt/pure/__retain
+   local.set $8
    local.get $1
    call $~lib/rt/pure/__release
-   local.get $7
+   local.get $2
+   call $~lib/rt/pure/__release
+   local.get $8
    return
-  else
-   local.get $5
-   i32.eqz
-   if
-    i32.const 1
-    i32.const 2
-    i32.const 3
-    i32.const 0
-    call $~lib/rt/__allocArray
-    call $~lib/rt/pure/__retain
-    local.set $3
-    local.get $3
-    i32.load offset=4
-    i32.const 272
-    i32.store
-    local.get $3
-    local.set $4
-    local.get $1
-    call $~lib/rt/pure/__release
-    local.get $4
-    return
-   end
   end
   i32.const 0
-  i32.const 2
-  i32.const 3
-  i32.const 0
-  call $~lib/rt/__allocArray
-  call $~lib/rt/pure/__retain
-  local.set $10
-  i32.const 0
-  local.set $11
-  i32.const 0
-  local.set $12
-  i32.const 0
   local.set $13
-  loop $while-continue|1
+  i32.const 0
+  local.set $14
+  local.get $3
+  local.set $15
+  loop $while-continue|2
    local.get $0
    local.get $1
-   local.get $12
+   local.get $11
    call $~lib/string/String#indexOf
-   local.tee $11
+   local.tee $12
    i32.const -1
    i32.xor
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    if
-    local.get $11
-    local.get $12
-    i32.sub
-    local.set $4
-    local.get $4
-    i32.const 0
-    i32.gt_s
+    local.get $13
+    i32.eqz
     if
-     local.get $4
+     local.get $3
      i32.const 1
      i32.shl
      i32.const 1
      call $~lib/rt/tlsf/__alloc
-     local.set $7
-     local.get $7
-     local.get $0
-     local.get $12
+     local.set $13
+    end
+    local.get $14
+    local.get $15
+    i32.gt_u
+    if
+     local.get $15
      i32.const 1
      i32.shl
-     i32.add
-     local.get $4
+     local.set $7
+     local.get $13
+     local.get $7
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
-     local.get $10
+     call $~lib/rt/tlsf/__realloc
+     local.set $13
      local.get $7
-     call $~lib/array/Array<~lib/string/String>#push
-     drop
-    else
-     local.get $10
-     i32.const 272
-     call $~lib/array/Array<~lib/string/String>#push
-     drop
+     local.set $15
     end
+    local.get $12
+    local.get $11
+    i32.sub
+    local.set $7
     local.get $13
+    local.get $14
     i32.const 1
+    i32.shl
     i32.add
-    local.tee $13
-    local.get $2
-    i32.eq
-    if
-     local.get $10
-     local.set $7
-     local.get $1
-     call $~lib/rt/pure/__release
-     local.get $7
-     return
-    end
+    local.get $0
     local.get $11
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $7
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $14
+    local.get $7
+    i32.add
+    local.set $14
+    local.get $13
+    local.get $14
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $2
+    local.get $6
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $14
     local.get $6
     i32.add
-    local.set $12
-    br $while-continue|1
+    local.set $14
+    local.get $12
+    local.get $4
+    i32.add
+    local.set $11
+    br $while-continue|2
    end
   end
-  local.get $12
-  i32.eqz
+  local.get $14
   if
-   local.get $10
-   local.get $0
-   call $~lib/array/Array<~lib/string/String>#push
-   drop
-   local.get $10
-   local.set $3
+   local.get $14
+   local.get $15
+   i32.gt_u
+   if
+    local.get $15
+    i32.const 1
+    i32.shl
+    local.set $5
+    local.get $13
+    local.get $5
+    i32.const 1
+    i32.shl
+    call $~lib/rt/tlsf/__realloc
+    local.set $13
+    local.get $5
+    local.set $15
+   end
+   local.get $3
+   local.get $11
+   i32.sub
+   local.set $5
+   local.get $5
+   if
+    local.get $13
+    local.get $14
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $11
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $5
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+   end
+   local.get $5
+   local.get $14
+   i32.add
+   local.set $5
+   local.get $15
+   local.get $5
+   i32.gt_u
+   if
+    local.get $13
+    local.get $5
+    i32.const 1
+    i32.shl
+    call $~lib/rt/tlsf/__realloc
+    local.set $13
+   end
+   local.get $13
+   call $~lib/rt/pure/__retain
+   local.set $8
    local.get $1
    call $~lib/rt/pure/__release
+   local.get $2
+   call $~lib/rt/pure/__release
+   local.get $8
+   return
+  end
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $5
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/string/String#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $3
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  if (result i32)
+   local.get $1
+   local.get $3
+   i32.add
+   local.tee $4
+   i32.const 0
+   local.tee $5
+   local.get $4
+   local.get $5
+   i32.gt_s
+   select
+  else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
+   local.get $4
+   local.get $5
+   i32.lt_s
+   select
+  end
+  local.set $1
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  if (result i32)
+   local.get $2
    local.get $3
-   return
+   i32.add
+   local.tee $4
+   i32.const 0
+   local.tee $5
+   local.get $4
+   local.get $5
+   i32.gt_s
+   select
+  else
+   local.get $2
+   local.tee $4
+   local.get $3
+   local.tee $5
+   local.get $4
+   local.get $5
+   i32.lt_s
+   select
   end
-  local.get $5
-  local.get $12
+  local.set $2
+  local.get $2
+  local.get $1
   i32.sub
-  local.set $14
-  local.get $14
+  local.set $3
+  local.get $3
   i32.const 0
-  i32.gt_s
+  i32.le_s
   if
-   local.get $14
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.set $3
-   local.get $3
-   local.get $0
-   local.get $12
-   i32.const 1
-   i32.shl
-   i32.add
-   local.get $14
-   i32.const 1
-   i32.shl
-   call $~lib/memory/memory.copy
-   local.get $10
-   local.get $3
-   call $~lib/array/Array<~lib/string/String>#push
-   drop
-  else
-   local.get $10
    i32.const 272
-   call $~lib/array/Array<~lib/string/String>#push
-   drop
+   call $~lib/rt/pure/__retain
+   return
   end
-  local.get $10
-  local.set $3
-  local.get $1
-  call $~lib/rt/pure/__release
   local.get $3
- )
- (func $~lib/array/Array<~lib/string/String>#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=12
- )
- (func $~lib/array/Array<~lib/string/String>#__unchecked_get (param $0 i32) (param $1 i32) (result i32)
+  i32.const 1
+  i32.shl
+  i32.const 1
+  call $~lib/rt/tlsf/__alloc
+  local.set $6
+  local.get $6
   local.get $0
-  i32.load offset=4
   local.get $1
-  i32.const 2
+  i32.const 1
   i32.shl
   i32.add
-  i32.load
+  local.get $3
+  i32.const 1
+  i32.shl
+  call $~lib/memory/memory.copy
+  local.get $6
   call $~lib/rt/pure/__retain
  )
- (func $~lib/array/Array<~lib/string/String>#__get (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/string/String#substr (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
   local.get $1
+  local.set $3
+  local.get $2
+  local.set $4
   local.get $0
-  i32.load offset=12
-  i32.ge_u
+  call $~lib/string/String#get:length
+  local.set $5
+  local.get $3
+  i32.const 0
+  i32.lt_s
   if
-   i32.const 12176
-   i32.const 12128
-   i32.const 104
-   i32.const 42
-   call $~lib/builtins/abort
-   unreachable
+   local.get $5
+   local.get $3
+   i32.add
+   local.tee $6
+   i32.const 0
+   local.tee $7
+   local.get $6
+   local.get $7
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $4
+  local.tee $6
+  i32.const 0
+  local.tee $7
+  local.get $6
+  local.get $7
+  i32.gt_s
+  select
+  local.tee $6
+  local.get $5
+  local.get $3
+  i32.sub
+  local.tee $7
+  local.get $6
+  local.get $7
+  i32.lt_s
+  select
+  i32.const 1
+  i32.shl
+  local.set $8
+  local.get $8
+  i32.const 0
+  i32.le_s
+  if
+   i32.const 272
+   call $~lib/rt/pure/__retain
+   return
   end
+  local.get $8
+  i32.const 1
+  call $~lib/rt/tlsf/__alloc
+  local.set $9
+  local.get $9
   local.get $0
-  local.get $1
-  call $~lib/array/Array<~lib/string/String>#__unchecked_get
-  local.set $2
+  local.get $3
   i32.const 1
-  drop
+  i32.shl
+  i32.add
+  local.get $8
+  call $~lib/memory/memory.copy
+  local.get $9
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $3
+  local.get $1
+  local.tee $4
   i32.const 0
-  i32.eqz
-  drop
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.lt_s
+  select
+  local.set $6
   local.get $2
+  local.tee $4
+  i32.const 0
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  local.tee $4
+  local.get $3
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.lt_s
+  select
+  local.set $7
+  local.get $6
+  local.tee $4
+  local.get $7
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.lt_s
+  select
+  i32.const 1
+  i32.shl
+  local.set $8
+  local.get $6
+  local.tee $4
+  local.get $7
+  local.tee $5
+  local.get $4
+  local.get $5
+  i32.gt_s
+  select
+  i32.const 1
+  i32.shl
+  local.set $9
+  local.get $9
+  local.get $8
+  i32.sub
+  local.set $10
+  local.get $10
   i32.eqz
   if
-   local.get $2
-   call $~lib/rt/pure/__release
-   i32.const 12240
-   i32.const 12128
-   i32.const 108
-   i32.const 40
-   call $~lib/builtins/abort
-   unreachable
+   i32.const 272
+   call $~lib/rt/pure/__retain
+   return
+  end
+  local.get $8
+  i32.eqz
+  if (result i32)
+   local.get $9
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.eq
+  else
+   i32.const 0
   end
-  local.get $2
- )
- (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
-  local.get $0
-  i32.const 100000
-  i32.lt_u
   if
    local.get $0
-   i32.const 100
-   i32.lt_u
-   if
-    i32.const 1
-    local.get $0
-    i32.const 10
-    i32.ge_u
-    i32.add
-    return
-   else
-    i32.const 3
-    local.get $0
-    i32.const 10000
-    i32.ge_u
-    i32.add
-    local.get $0
-    i32.const 1000
-    i32.ge_u
-    i32.add
-    return
-   end
-   unreachable
-  else
-   local.get $0
-   i32.const 10000000
-   i32.lt_u
-   if
-    i32.const 6
-    local.get $0
-    i32.const 1000000
-    i32.ge_u
-    i32.add
-    return
-   else
-    i32.const 8
-    local.get $0
-    i32.const 1000000000
-    i32.ge_u
-    i32.add
-    local.get $0
-    i32.const 100000000
-    i32.ge_u
-    i32.add
-    return
-   end
-   unreachable
+   call $~lib/rt/pure/__retain
+   return
   end
-  unreachable
+  local.get $10
+  i32.const 1
+  call $~lib/rt/tlsf/__alloc
+  local.set $11
+  local.get $11
+  local.get $0
+  local.get $8
+  i32.add
+  local.get $10
+  call $~lib/memory/memory.copy
+  local.get $11
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/utoa32_lut (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i32)
-  loop $while-continue|0
-   local.get $1
-   i32.const 10000
-   i32.ge_u
-   local.set $3
-   local.get $3
-   if
-    local.get $1
-    i32.const 10000
-    i32.div_u
-    local.set $4
-    local.get $1
-    i32.const 10000
-    i32.rem_u
-    local.set $5
-    local.get $4
-    local.set $1
-    local.get $5
-    i32.const 100
-    i32.div_u
-    local.set $6
-    local.get $5
-    i32.const 100
-    i32.rem_u
-    local.set $7
-    i32.const 12524
-    local.get $6
-    i32.const 2
-    i32.shl
-    i32.add
-    i64.load32_u
-    local.set $8
-    i32.const 12524
-    local.get $7
-    i32.const 2
-    i32.shl
-    i32.add
-    i64.load32_u
-    local.set $9
-    local.get $2
-    i32.const 4
-    i32.sub
-    local.set $2
-    local.get $0
-    local.get $2
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $8
-    local.get $9
-    i64.const 32
-    i64.shl
-    i64.or
-    i64.store
-    br $while-continue|0
-   end
-  end
+  local.get $0
   local.get $1
-  i32.const 100
-  i32.ge_u
+  call $~lib/rt/tlsf/__alloc
+  local.set $3
+  local.get $2
   if
-   local.get $1
-   i32.const 100
-   i32.div_u
-   local.set $3
-   local.get $1
-   i32.const 100
-   i32.rem_u
-   local.set $10
    local.get $3
-   local.set $1
    local.get $2
-   i32.const 2
-   i32.sub
-   local.set $2
-   i32.const 12524
-   local.get $10
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load
-   local.set $11
    local.get $0
-   local.get $2
-   i32.const 1
-   i32.shl
-   i32.add
-   local.get $11
-   i32.store
+   call $~lib/memory/memory.copy
   end
+  local.get $3
+ )
+ (func $~lib/rt/__allocArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  i32.const 16
+  local.get $2
+  call $~lib/rt/tlsf/__alloc
+  local.set $4
+  local.get $0
   local.get $1
-  i32.const 10
-  i32.ge_u
-  if
-   local.get $2
-   i32.const 2
-   i32.sub
-   local.set $2
-   i32.const 12524
-   local.get $1
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load
-   local.set $11
-   local.get $0
-   local.get $2
-   i32.const 1
-   i32.shl
-   i32.add
-   local.get $11
-   i32.store
-  else
-   local.get $2
-   i32.const 1
-   i32.sub
-   local.set $2
-   i32.const 48
-   local.get $1
-   i32.add
-   local.set $11
-   local.get $0
-   local.get $2
-   i32.const 1
-   i32.shl
-   i32.add
-   local.get $11
-   i32.store16
-  end
+  i32.shl
+  local.set $5
+  local.get $5
+  i32.const 0
+  local.get $3
+  call $~lib/rt/__allocBuffer
+  local.set $6
+  local.get $4
+  local.get $6
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $4
+  local.get $6
+  i32.store offset=4
+  local.get $4
+  local.get $5
+  i32.store offset=8
+  local.get $4
+  local.get $0
+  i32.store offset=12
+  local.get $4
  )
- (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
+  (local $7 i32)
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
   local.get $0
-  i32.eqz
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
   if
-   i32.const 1424
    return
   end
   local.get $0
-  i32.const 31
-  i32.shr_u
-  local.set $1
   local.get $1
-  if
-   i32.const 0
-   local.get $0
-   i32.sub
-   local.set $0
-  end
+  i32.store8 offset=1
   local.get $0
-  call $~lib/util/number/decimalCount32
   local.get $1
-  i32.add
-  local.set $2
-  local.get $2
-  i32.const 1
-  i32.shl
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.set $3
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
   local.get $3
-  local.set $6
-  local.get $0
-  local.set $5
-  local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
   local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
   if
-   local.get $3
-   i32.const 45
-   i32.store16
+   return
   end
-  local.get $3
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
-  i32.eqz
+  local.get $1
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
   if
-   i32.const 1424
    return
   end
+  i32.const 0
   local.get $0
-  call $~lib/util/number/decimalCount32
-  local.set $1
-  local.get $1
-  i32.const 1
-  i32.shl
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
   local.set $2
   local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
   local.set $5
   local.get $0
-  local.set $4
-  local.get $1
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
   local.set $3
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
+  local.get $0
   local.get $5
-  local.get $4
+  i32.store
   local.get $3
-  call $~lib/util/number/utoa32_lut
+  local.get $5
+  i32.store offset=24
   local.get $2
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32)
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
   local.get $0
-  i64.const 1000000000000000
-  i64.lt_u
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
   if
-   local.get $0
-   i64.const 1000000000000
-   i64.lt_u
-   if
-    i32.const 10
-    local.get $0
-    i64.const 100000000000
-    i64.ge_u
-    i32.add
-    local.get $0
-    i64.const 10000000000
-    i64.ge_u
-    i32.add
-    return
-   else
-    i32.const 13
-    local.get $0
-    i64.const 100000000000000
-    i64.ge_u
-    i32.add
-    local.get $0
-    i64.const 10000000000000
-    i64.ge_u
-    i32.add
-    return
-   end
-   unreachable
-  else
-   local.get $0
-   i64.const 100000000000000000
-   i64.lt_u
-   if
-    i32.const 16
-    local.get $0
-    i64.const 10000000000000000
-    i64.ge_u
-    i32.add
-    return
-   else
-    i32.const 18
-    local.get $0
-    i64.const -8446744073709551616
-    i64.ge_u
-    i32.add
-    local.get $0
-    i64.const 1000000000000000000
-    i64.ge_u
-    i32.add
-    return
-   end
-   unreachable
+   return
   end
-  unreachable
- )
- (func $~lib/util/number/utoa64_lut (param $0 i32) (param $1 i64) (param $2 i32)
-  (local $3 i32)
-  (local $4 i64)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  (local $12 i64)
-  (local $13 i64)
-  loop $while-continue|0
-   local.get $1
-   i64.const 100000000
-   i64.ge_u
-   local.set $3
-   local.get $3
-   if
-    local.get $1
-    i64.const 100000000
-    i64.div_u
-    local.set $4
-    local.get $1
-    local.get $4
-    i64.const 100000000
-    i64.mul
-    i64.sub
-    i32.wrap_i64
-    local.set $5
-    local.get $4
-    local.set $1
-    local.get $5
-    i32.const 10000
-    i32.div_u
-    local.set $6
-    local.get $5
-    i32.const 10000
-    i32.rem_u
-    local.set $7
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
+   local.set $7
+   local.get $7
+   if
+    local.get $0
     local.get $6
-    i32.const 100
-    i32.div_u
-    local.set $8
+    i64.store
+    local.get $0
     local.get $6
-    i32.const 100
-    i32.rem_u
-    local.set $9
-    local.get $7
-    i32.const 100
-    i32.div_u
-    local.set $10
-    local.get $7
-    i32.const 100
-    i32.rem_u
-    local.set $11
-    i32.const 12524
-    local.get $10
-    i32.const 2
-    i32.shl
-    i32.add
-    i64.load32_u
-    local.set $12
-    i32.const 12524
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    i64.load32_u
-    local.set $13
-    local.get $2
-    i32.const 4
-    i32.sub
-    local.set $2
+    i64.store offset=8
     local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
     local.get $2
-    i32.const 1
-    i32.shl
-    i32.add
-    local.get $12
-    local.get $13
-    i64.const 32
-    i64.shl
-    i64.or
-    i64.store
-    i32.const 12524
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i64.load32_u
-    local.set $12
-    i32.const 12524
-    local.get $9
-    i32.const 2
-    i32.shl
-    i32.add
-    i64.load32_u
-    local.set $13
-    local.get $2
-    i32.const 4
+    i32.const 32
     i32.sub
     local.set $2
     local.get $0
-    local.get $2
-    i32.const 1
-    i32.shl
+    i32.const 32
     i32.add
-    local.get $12
-    local.get $13
-    i64.const 32
-    i64.shl
-    i64.or
-    i64.store
+    local.set $0
     br $while-continue|0
    end
   end
-  local.get $0
-  local.get $1
-  i32.wrap_i64
-  local.get $2
-  call $~lib/util/number/utoa32_lut
  )
- (func $~lib/util/number/utoa64 (param $0 i64) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i64)
-  local.get $0
-  i64.const 0
-  i64.ne
-  i32.eqz
-  if
-   i32.const 1424
-   return
-  end
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
-  global.get $~lib/builtins/u32.MAX_VALUE
-  i64.extend_i32_u
-  i64.le_u
-  if
-   local.get $0
-   i32.wrap_i64
-   local.set $2
-   local.get $2
-   call $~lib/util/number/decimalCount32
-   local.set $3
-   local.get $3
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.set $1
-   local.get $1
-   local.set $6
-   local.get $2
-   local.set $5
-   local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/number/utoa32_lut
-  else
-   local.get $0
-   call $~lib/util/number/decimalCount64High
-   local.set $3
-   local.get $3
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.set $1
-   local.get $1
-   local.set $5
-   local.get $0
-   local.set $7
-   local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $5
-   local.get $7
-   local.get $4
-   call $~lib/util/number/utoa64_lut
-  end
   local.get $1
-  call $~lib/rt/pure/__retain
+  local.get $2
+  call $~lib/util/memory/memset
  )
- (func $~lib/util/number/itoa64 (param $0 i64) (result i32)
-  (local $1 i32)
-  (local $2 i32)
+ (func $~lib/array/ensureSize (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
   local.get $0
-  i64.const 0
-  i64.ne
-  i32.eqz
-  if
-   i32.const 1424
-   return
-  end
-  local.get $0
-  i64.const 63
-  i64.shr_u
-  i32.wrap_i64
-  local.set $1
+  i32.load offset=8
+  local.set $3
   local.get $1
+  local.get $3
+  local.get $2
+  i32.shr_u
+  i32.gt_u
   if
-   i64.const 0
-   local.get $0
-   i64.sub
-   local.set $0
-  end
-  local.get $0
-  global.get $~lib/builtins/u32.MAX_VALUE
-  i64.extend_i32_u
-  i64.le_u
-  if
-   local.get $0
-   i32.wrap_i64
-   local.set $3
-   local.get $3
-   call $~lib/util/number/decimalCount32
    local.get $1
-   i32.add
-   local.set $4
-   local.get $4
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.set $2
+   i32.const 1073741808
    local.get $2
-   local.set $7
-   local.get $3
-   local.set $6
-   local.get $4
-   local.set $5
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $7
-   local.get $6
-   local.get $5
-   call $~lib/util/number/utoa32_lut
-  else
+   i32.shr_u
+   i32.gt_u
+   if
+    i32.const 10864
+    i32.const 12128
+    i32.const 14
+    i32.const 48
+    call $~lib/builtins/abort
+    unreachable
+   end
    local.get $0
-   call $~lib/util/number/decimalCount64High
-   local.get $1
-   i32.add
+   i32.load
    local.set $4
-   local.get $4
-   i32.const 1
-   i32.shl
-   i32.const 1
-   call $~lib/rt/tlsf/__alloc
-   local.set $2
+   local.get $1
    local.get $2
-   local.set $6
-   local.get $0
-   local.set $8
-   local.get $4
+   i32.shl
    local.set $5
+   local.get $4
+   local.get $5
+   call $~lib/rt/tlsf/__realloc
+   local.set $6
+   local.get $6
+   local.get $3
+   i32.add
    i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
+   local.get $5
+   local.get $3
+   i32.sub
+   call $~lib/memory/memory.fill
    local.get $6
-   local.get $8
+   local.get $4
+   i32.ne
+   if
+    local.get $0
+    local.get $6
+    i32.store
+    local.get $0
+    local.get $6
+    i32.store offset=4
+   end
+   local.get $0
    local.get $5
-   call $~lib/util/number/utoa64_lut
-  end
-  local.get $1
-  if
-   local.get $2
-   i32.const 45
-   i32.store16
+   i32.store offset=8
   end
-  local.get $2
-  call $~lib/rt/pure/__retain
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i64)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i64)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 i32)
-  (local $17 i32)
-  (local $18 i32)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
-  i32.const 0
-  local.get $4
-  i32.sub
-  local.set $7
-  i64.const 1
-  local.get $7
-  i64.extend_i32_s
-  i64.shl
-  local.set $8
-  local.get $8
-  i64.const 1
-  i64.sub
-  local.set $9
-  local.get $3
-  local.get $1
-  i64.sub
-  local.set $10
-  local.get $4
-  local.set $11
-  local.get $3
-  local.get $7
-  i64.extend_i32_s
-  i64.shr_u
-  i32.wrap_i64
-  local.set $12
-  local.get $3
-  local.get $9
-  i64.and
-  local.set $13
-  local.get $12
-  call $~lib/util/number/decimalCount32
-  local.set $14
-  local.get $6
-  local.set $15
-  loop $while-continue|0
-   local.get $14
-   i32.const 0
-   i32.gt_s
-   local.set $16
-   local.get $16
-   if
-    block $break|1
-     block $case10|1
-      block $case9|1
-       block $case8|1
-        block $case7|1
-         block $case6|1
-          block $case5|1
-           block $case4|1
-            block $case3|1
-             block $case2|1
-              block $case1|1
-               block $case0|1
-                local.get $14
-                local.set $18
-                local.get $18
-                i32.const 10
-                i32.eq
-                br_if $case0|1
-                local.get $18
-                i32.const 9
-                i32.eq
-                br_if $case1|1
-                local.get $18
-                i32.const 8
-                i32.eq
-                br_if $case2|1
-                local.get $18
-                i32.const 7
-                i32.eq
-                br_if $case3|1
-                local.get $18
-                i32.const 6
-                i32.eq
-                br_if $case4|1
-                local.get $18
-                i32.const 5
-                i32.eq
-                br_if $case5|1
-                local.get $18
-                i32.const 4
-                i32.eq
-                br_if $case6|1
-                local.get $18
-                i32.const 3
-                i32.eq
-                br_if $case7|1
-                local.get $18
-                i32.const 2
-                i32.eq
-                br_if $case8|1
-                local.get $18
-                i32.const 1
-                i32.eq
-                br_if $case9|1
-                br $case10|1
-               end
-               local.get $12
-               i32.const 1000000000
-               i32.div_u
-               local.set $17
-               local.get $12
-               i32.const 1000000000
-               i32.rem_u
-               local.set $12
-               br $break|1
-              end
-              local.get $12
-              i32.const 100000000
-              i32.div_u
-              local.set $17
-              local.get $12
-              i32.const 100000000
-              i32.rem_u
-              local.set $12
-              br $break|1
-             end
-             local.get $12
-             i32.const 10000000
-             i32.div_u
-             local.set $17
-             local.get $12
-             i32.const 10000000
-             i32.rem_u
-             local.set $12
-             br $break|1
-            end
-            local.get $12
-            i32.const 1000000
-            i32.div_u
-            local.set $17
-            local.get $12
-            i32.const 1000000
-            i32.rem_u
-            local.set $12
-            br $break|1
-           end
-           local.get $12
-           i32.const 100000
-           i32.div_u
-           local.set $17
-           local.get $12
-           i32.const 100000
-           i32.rem_u
-           local.set $12
-           br $break|1
-          end
-          local.get $12
-          i32.const 10000
-          i32.div_u
-          local.set $17
-          local.get $12
-          i32.const 10000
-          i32.rem_u
-          local.set $12
-          br $break|1
-         end
-         local.get $12
-         i32.const 1000
-         i32.div_u
-         local.set $17
-         local.get $12
-         i32.const 1000
-         i32.rem_u
-         local.set $12
-         br $break|1
-        end
-        local.get $12
-        i32.const 100
-        i32.div_u
-        local.set $17
-        local.get $12
-        i32.const 100
-        i32.rem_u
-        local.set $12
-        br $break|1
-       end
-       local.get $12
-       i32.const 10
-       i32.div_u
-       local.set $17
-       local.get $12
-       i32.const 10
-       i32.rem_u
-       local.set $12
-       br $break|1
-      end
-      local.get $12
-      local.set $17
-      i32.const 0
-      local.set $12
-      br $break|1
-     end
-     i32.const 0
-     local.set $17
-     br $break|1
-    end
-    local.get $17
-    local.get $15
-    i32.or
+ (func $~lib/array/Array<~lib/string/String>#push (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  i32.load offset=12
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $3
+  i32.const 2
+  call $~lib/array/ensureSize
+  i32.const 1
+  drop
+  local.get $0
+  i32.load offset=4
+  local.get $2
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $0
+  local.get $3
+  i32.store offset=12
+  local.get $3
+  local.set $4
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/string/String#split (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  (local $12 i32)
+  (local $13 i32)
+  (local $14 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $2
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 2
+   i32.const 3
+   i32.const 0
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
+   local.set $3
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $3
+   return
+  end
+  local.get $1
+  i32.const 0
+  i32.eq
+  if
+   i32.const 1
+   i32.const 2
+   i32.const 3
+   i32.const 0
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
+   local.set $3
+   local.get $3
+   i32.load offset=4
+   local.set $4
+   local.get $4
+   local.get $0
+   call $~lib/rt/pure/__retain
+   i32.store
+   local.get $3
+   local.set $4
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $4
+   return
+  end
+  local.get $0
+  call $~lib/string/String#get:length
+  local.set $5
+  local.get $1
+  call $~lib/string/String#get:length
+  local.set $6
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  if
+   global.get $~lib/builtins/i32.MAX_VALUE
+   local.set $2
+  end
+  local.get $6
+  i32.eqz
+  if
+   local.get $5
+   i32.eqz
+   if
+    i32.const 0
+    i32.const 2
+    i32.const 3
+    i32.const 0
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
+    local.set $4
+    local.get $1
+    call $~lib/rt/pure/__release
+    local.get $4
+    return
+   end
+   local.get $5
+   local.tee $4
+   local.get $2
+   local.tee $3
+   local.get $4
+   local.get $3
+   i32.lt_s
+   select
+   local.set $5
+   local.get $5
+   i32.const 2
+   i32.const 3
+   i32.const 0
+   call $~lib/rt/__allocArray
+   call $~lib/rt/pure/__retain
+   local.set $4
+   local.get $4
+   i32.load offset=4
+   local.set $3
+   i32.const 0
+   local.set $7
+   loop $for-loop|0
+    local.get $7
+    local.get $5
+    i32.lt_s
+    local.set $8
+    local.get $8
     if
+     i32.const 2
+     i32.const 1
+     call $~lib/rt/tlsf/__alloc
+     local.set $9
+     local.get $9
      local.get $0
-     local.get $15
-     local.tee $18
+     local.get $7
      i32.const 1
+     i32.shl
      i32.add
-     local.set $15
-     local.get $18
-     i32.const 1
+     i32.load16_u
+     i32.store16
+     local.get $3
+     local.get $7
+     i32.const 2
      i32.shl
      i32.add
-     i32.const 48
-     local.get $17
-     i32.const 65535
-     i32.and
+     local.get $9
+     i32.store
+     i32.const 1
+     drop
+     local.get $9
+     call $~lib/rt/pure/__retain
+     drop
+     local.get $7
+     i32.const 1
      i32.add
-     i32.store16
+     local.set $7
+     br $for-loop|0
     end
-    local.get $14
+   end
+   local.get $4
+   local.set $7
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $7
+   return
+  else
+   local.get $5
+   i32.eqz
+   if
     i32.const 1
-    i32.sub
-    local.set $14
+    i32.const 2
+    i32.const 3
+    i32.const 0
+    call $~lib/rt/__allocArray
+    call $~lib/rt/pure/__retain
+    local.set $3
+    local.get $3
+    i32.load offset=4
+    i32.const 272
+    i32.store
+    local.get $3
+    local.set $4
+    local.get $1
+    call $~lib/rt/pure/__release
+    local.get $4
+    return
+   end
+  end
+  i32.const 0
+  i32.const 2
+  i32.const 3
+  i32.const 0
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
+  local.set $10
+  i32.const 0
+  local.set $11
+  i32.const 0
+  local.set $12
+  i32.const 0
+  local.set $13
+  loop $while-continue|1
+   local.get $0
+   local.get $1
+   local.get $12
+   call $~lib/string/String#indexOf
+   local.tee $11
+   i32.const -1
+   i32.xor
+   local.set $3
+   local.get $3
+   if
+    local.get $11
     local.get $12
-    i64.extend_i32_u
-    local.get $7
-    i64.extend_i32_s
-    i64.shl
-    local.get $13
-    i64.add
-    local.set $19
-    local.get $19
-    local.get $5
-    i64.le_u
+    i32.sub
+    local.set $4
+    local.get $4
+    i32.const 0
+    i32.gt_s
     if
-     global.get $~lib/util/number/_K
-     local.get $14
-     i32.add
-     global.set $~lib/util/number/_K
-     local.get $0
-     local.set $24
-     local.get $15
-     local.set $18
-     local.get $5
-     local.set $23
-     local.get $19
-     local.set $22
-     i32.const 15592
-     local.get $14
-     i32.const 2
+     local.get $4
+     i32.const 1
      i32.shl
-     i32.add
-     i64.load32_u
-     local.get $7
-     i64.extend_i32_s
-     i64.shl
-     local.set $21
-     local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
      i32.const 1
-     i32.sub
+     call $~lib/rt/tlsf/__alloc
+     local.set $7
+     local.get $7
+     local.get $0
+     local.get $12
      i32.const 1
      i32.shl
      i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
-     local.get $15
+     local.get $4
+     i32.const 1
+     i32.shl
+     call $~lib/memory/memory.copy
+     local.get $10
+     local.get $7
+     call $~lib/array/Array<~lib/string/String>#push
+     drop
+    else
+     local.get $10
+     i32.const 272
+     call $~lib/array/Array<~lib/string/String>#push
+     drop
+    end
+    local.get $13
+    i32.const 1
+    i32.add
+    local.tee $13
+    local.get $2
+    i32.eq
+    if
+     local.get $10
+     local.set $7
+     local.get $1
+     call $~lib/rt/pure/__release
+     local.get $7
      return
     end
+    local.get $11
+    local.get $6
+    i32.add
+    local.set $12
+    br $while-continue|1
+   end
+  end
+  local.get $12
+  i32.eqz
+  if
+   local.get $10
+   local.get $0
+   call $~lib/array/Array<~lib/string/String>#push
+   drop
+   local.get $10
+   local.set $3
+   local.get $1
+   call $~lib/rt/pure/__release
+   local.get $3
+   return
+  end
+  local.get $5
+  local.get $12
+  i32.sub
+  local.set $14
+  local.get $14
+  i32.const 0
+  i32.gt_s
+  if
+   local.get $14
+   i32.const 1
+   i32.shl
+   i32.const 1
+   call $~lib/rt/tlsf/__alloc
+   local.set $3
+   local.get $3
+   local.get $0
+   local.get $12
+   i32.const 1
+   i32.shl
+   i32.add
+   local.get $14
+   i32.const 1
+   i32.shl
+   call $~lib/memory/memory.copy
+   local.get $10
+   local.get $3
+   call $~lib/array/Array<~lib/string/String>#push
+   drop
+  else
+   local.get $10
+   i32.const 272
+   call $~lib/array/Array<~lib/string/String>#push
+   drop
+  end
+  local.get $10
+  local.set $3
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $3
+ )
+ (func $~lib/array/Array<~lib/string/String>#get:length (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=12
+ )
+ (func $~lib/array/Array<~lib/string/String>#__unchecked_get (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/array/Array<~lib/string/String>#__get (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  local.get $0
+  i32.load offset=12
+  i32.ge_u
+  if
+   i32.const 12176
+   i32.const 12128
+   i32.const 104
+   i32.const 42
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  call $~lib/array/Array<~lib/string/String>#__unchecked_get
+  local.set $2
+  i32.const 1
+  drop
+  i32.const 0
+  i32.eqz
+  drop
+  local.get $2
+  i32.eqz
+  if
+   local.get $2
+   call $~lib/rt/pure/__release
+   i32.const 12240
+   i32.const 12128
+   i32.const 108
+   i32.const 40
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+ )
+ (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
+  local.get $0
+  i32.const 100000
+  i32.lt_u
+  if
+   local.get $0
+   i32.const 100
+   i32.lt_u
+   if
+    i32.const 1
+    local.get $0
+    i32.const 10
+    i32.ge_u
+    i32.add
+    return
+   else
+    i32.const 3
+    local.get $0
+    i32.const 10000
+    i32.ge_u
+    i32.add
+    local.get $0
+    i32.const 1000
+    i32.ge_u
+    i32.add
+    return
+   end
+   unreachable
+  else
+   local.get $0
+   i32.const 10000000
+   i32.lt_u
+   if
+    i32.const 6
+    local.get $0
+    i32.const 1000000
+    i32.ge_u
+    i32.add
+    return
+   else
+    i32.const 8
+    local.get $0
+    i32.const 1000000000
+    i32.ge_u
+    i32.add
+    local.get $0
+    i32.const 100000000
+    i32.ge_u
+    i32.add
+    return
+   end
+   unreachable
+  end
+  unreachable
+ )
+ (func $~lib/util/number/utoa32_lut (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i64)
+  (local $10 i32)
+  (local $11 i32)
+  loop $while-continue|0
+   local.get $1
+   i32.const 10000
+   i32.ge_u
+   local.set $3
+   local.get $3
+   if
+    local.get $1
+    i32.const 10000
+    i32.div_u
+    local.set $4
+    local.get $1
+    i32.const 10000
+    i32.rem_u
+    local.set $5
+    local.get $4
+    local.set $1
+    local.get $5
+    i32.const 100
+    i32.div_u
+    local.set $6
+    local.get $5
+    i32.const 100
+    i32.rem_u
+    local.set $7
+    i32.const 12524
+    local.get $6
+    i32.const 2
+    i32.shl
+    i32.add
+    i64.load32_u
+    local.set $8
+    i32.const 12524
+    local.get $7
+    i32.const 2
+    i32.shl
+    i32.add
+    i64.load32_u
+    local.set $9
+    local.get $2
+    i32.const 4
+    i32.sub
+    local.set $2
+    local.get $0
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $8
+    local.get $9
+    i64.const 32
+    i64.shl
+    i64.or
+    i64.store
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  local.get $1
+  i32.const 100
+  i32.ge_u
+  if
+   local.get $1
+   i32.const 100
+   i32.div_u
+   local.set $3
+   local.get $1
+   i32.const 100
+   i32.rem_u
+   local.set $10
+   local.get $3
+   local.set $1
+   local.get $2
+   i32.const 2
+   i32.sub
+   local.set $2
+   i32.const 12524
+   local.get $10
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load
+   local.set $11
+   local.get $0
+   local.get $2
+   i32.const 1
+   i32.shl
+   i32.add
+   local.get $11
+   i32.store
+  end
+  local.get $1
+  i32.const 10
+  i32.ge_u
+  if
+   local.get $2
+   i32.const 2
+   i32.sub
+   local.set $2
+   i32.const 12524
+   local.get $1
+   i32.const 2
+   i32.shl
+   i32.add
+   i32.load
+   local.set $11
+   local.get $0
+   local.get $2
    i32.const 1
-   local.set $16
-   local.get $16
+   i32.shl
+   i32.add
+   local.get $11
+   i32.store
+  else
+   local.get $2
+   i32.const 1
+   i32.sub
+   local.set $2
+   i32.const 48
+   local.get $1
+   i32.add
+   local.set $11
+   local.get $0
+   local.get $2
+   i32.const 1
+   i32.shl
+   i32.add
+   local.get $11
+   i32.store16
+  end
+ )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
+ (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  i32.eqz
+  if
+   i32.const 1424
+   return
+  end
+  local.get $0
+  i32.const 31
+  i32.shr_u
+  local.set $1
+  local.get $1
+  if
+   i32.const 0
+   local.get $0
+   i32.sub
+   local.set $0
+  end
+  local.get $0
+  call $~lib/util/number/decimalCount32
+  local.get $1
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.shl
+  i32.const 1
+  call $~lib/rt/tlsf/__alloc
+  local.set $3
+  local.get $3
+  local.get $0
+  local.get $2
+  call $~lib/util/number/utoa32_core
+  local.get $1
+  if
+   local.get $3
+   i32.const 45
+   i32.store16
+  end
+  local.get $3
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.eqz
+  if
+   i32.const 1424
+   return
+  end
+  local.get $0
+  call $~lib/util/number/decimalCount32
+  local.set $1
+  local.get $1
+  i32.const 1
+  i32.shl
+  i32.const 1
+  call $~lib/rt/tlsf/__alloc
+  local.set $2
+  local.get $2
+  local.get $0
+  local.get $1
+  call $~lib/util/number/utoa32_core
+  local.get $2
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32)
+  local.get $0
+  i64.const 1000000000000000
+  i64.lt_u
+  if
+   local.get $0
+   i64.const 1000000000000
+   i64.lt_u
+   if
+    i32.const 10
+    local.get $0
+    i64.const 100000000000
+    i64.ge_u
+    i32.add
+    local.get $0
+    i64.const 10000000000
+    i64.ge_u
+    i32.add
+    return
+   else
+    i32.const 13
+    local.get $0
+    i64.const 100000000000000
+    i64.ge_u
+    i32.add
+    local.get $0
+    i64.const 10000000000000
+    i64.ge_u
+    i32.add
+    return
+   end
+   unreachable
+  else
+   local.get $0
+   i64.const 100000000000000000
+   i64.lt_u
+   if
+    i32.const 16
+    local.get $0
+    i64.const 10000000000000000
+    i64.ge_u
+    i32.add
+    return
+   else
+    i32.const 18
+    local.get $0
+    i64.const -8446744073709551616
+    i64.ge_u
+    i32.add
+    local.get $0
+    i64.const 1000000000000000000
+    i64.ge_u
+    i32.add
+    return
+   end
+   unreachable
+  end
+  unreachable
+ )
+ (func $~lib/util/number/utoa64_lut (param $0 i32) (param $1 i64) (param $2 i32)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i64)
+  loop $while-continue|0
+   local.get $1
+   i64.const 100000000
+   i64.ge_u
+   local.set $3
+   local.get $3
    if
-    local.get $13
-    i64.const 10
-    i64.mul
-    local.set $13
-    local.get $5
-    i64.const 10
+    local.get $1
+    i64.const 100000000
+    i64.div_u
+    local.set $4
+    local.get $1
+    local.get $4
+    i64.const 100000000
     i64.mul
+    i64.sub
+    i32.wrap_i64
     local.set $5
-    local.get $13
+    local.get $4
+    local.set $1
+    local.get $5
+    i32.const 10000
+    i32.div_u
+    local.set $6
+    local.get $5
+    i32.const 10000
+    i32.rem_u
+    local.set $7
+    local.get $6
+    i32.const 100
+    i32.div_u
+    local.set $8
+    local.get $6
+    i32.const 100
+    i32.rem_u
+    local.set $9
     local.get $7
-    i64.extend_i32_s
-    i64.shr_u
-    local.set $23
-    local.get $23
-    local.get $15
-    i64.extend_i32_s
-    i64.or
-    i64.const 0
-    i64.ne
-    if
-     local.get $0
-     local.get $15
-     local.tee $26
-     i32.const 1
-     i32.add
-     local.set $15
-     local.get $26
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.const 48
-     local.get $23
-     i32.wrap_i64
-     i32.const 65535
-     i32.and
-     i32.add
-     i32.store16
-    end
+    i32.const 100
+    i32.div_u
+    local.set $10
+    local.get $7
+    i32.const 100
+    i32.rem_u
+    local.set $11
+    i32.const 12524
+    local.get $10
+    i32.const 2
+    i32.shl
+    i32.add
+    i64.load32_u
+    local.set $12
+    i32.const 12524
+    local.get $11
+    i32.const 2
+    i32.shl
+    i32.add
+    i64.load32_u
+    local.set $13
+    local.get $2
+    i32.const 4
+    i32.sub
+    local.set $2
+    local.get $0
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $12
     local.get $13
+    i64.const 32
+    i64.shl
+    i64.or
+    i64.store
+    i32.const 12524
+    local.get $8
+    i32.const 2
+    i32.shl
+    i32.add
+    i64.load32_u
+    local.set $12
+    i32.const 12524
     local.get $9
-    i64.and
+    i32.const 2
+    i32.shl
+    i32.add
+    i64.load32_u
     local.set $13
-    local.get $14
-    i32.const 1
+    local.get $2
+    i32.const 4
     i32.sub
-    local.set $14
+    local.set $2
+    local.get $0
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    local.get $12
     local.get $13
-    local.get $5
-    i64.lt_u
-    if
-     global.get $~lib/util/number/_K
-     local.get $14
-     i32.add
-     global.set $~lib/util/number/_K
-     local.get $10
-     i32.const 15592
-     i32.const 0
-     local.get $14
-     i32.sub
-     i32.const 2
-     i32.shl
-     i32.add
-     i64.load32_u
-     i64.mul
-     local.set $10
-     local.get $0
-     local.set $18
-     local.get $15
-     local.set $27
-     local.get $5
-     local.set $28
-     local.get $13
-     local.set $22
-     local.get $8
-     local.set $21
-     local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
-     local.get $15
-     return
-    end
-    br $while-continue|4
+    i64.const 32
+    i64.shl
+    i64.or
+    i64.store
+    br $while-continue|0
    end
   end
-  unreachable
+  local.get $0
+  local.get $1
+  i32.wrap_i64
+  local.get $2
+  call $~lib/util/number/utoa32_lut
  )
- (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa64_lut
+ )
+ (func $~lib/util/number/utoa64 (param $0 i64) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  i64.const 0
+  i64.ne
+  i32.eqz
+  if
+   i32.const 1424
+   return
+  end
+  local.get $0
+  global.get $~lib/builtins/u32.MAX_VALUE
+  i64.extend_i32_u
+  i64.le_u
+  if
+   local.get $0
+   i32.wrap_i64
+   local.set $2
+   local.get $2
+   call $~lib/util/number/decimalCount32
+   local.set $3
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.const 1
+   call $~lib/rt/tlsf/__alloc
+   local.set $1
+   local.get $1
+   local.get $2
+   local.get $3
+   call $~lib/util/number/utoa32_core
+  else
+   local.get $0
+   call $~lib/util/number/decimalCount64High
+   local.set $3
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.const 1
+   call $~lib/rt/tlsf/__alloc
+   local.set $1
+   local.get $1
+   local.get $0
+   local.get $3
+   call $~lib/util/number/utoa64_core
+  end
+  local.get $1
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/util/number/itoa64 (param $0 i64) (result i32)
+  (local $1 i32)
+  (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $2
+  local.get $0
+  i64.const 0
+  i64.ne
   i32.eqz
+  if
+   i32.const 1424
+   return
+  end
+  local.get $0
+  i64.const 63
+  i64.shr_u
+  i32.wrap_i64
+  local.set $1
+  local.get $1
+  if
+   i64.const 0
+   local.get $0
+   i64.sub
+   local.set $0
+  end
+  local.get $0
+  global.get $~lib/builtins/u32.MAX_VALUE
+  i64.extend_i32_u
+  i64.le_u
   if
    local.get $0
+   i32.wrap_i64
+   local.set $3
+   local.get $3
+   call $~lib/util/number/decimalCount32
    local.get $1
-   i32.const 1
-   i32.shl
    i32.add
-   i32.const 46
-   i32.const 48
-   i32.const 16
+   local.set $4
+   local.get $4
+   i32.const 1
    i32.shl
-   i32.or
-   i32.store
+   i32.const 1
+   call $~lib/rt/tlsf/__alloc
+   local.set $2
+   local.get $2
+   local.get $3
+   local.get $4
+   call $~lib/util/number/utoa32_core
+  else
+   local.get $0
+   call $~lib/util/number/decimalCount64High
    local.get $1
-   i32.const 2
    i32.add
-   return
+   local.set $4
+   local.get $4
+   i32.const 1
+   i32.shl
+   i32.const 1
+   call $~lib/rt/tlsf/__alloc
+   local.set $2
+   local.get $2
+   local.get $0
+   local.get $4
+   call $~lib/util/number/utoa64_core
+  end
+  local.get $1
+  if
+   local.get $2
+   i32.const 45
+   i32.store16
   end
+  local.get $2
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
+  local.get $4
+  i32.sub
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $1
+  local.get $5
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
   local.get $1
+  f64.ne
+  i32.add
+  local.set $2
   local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 14720
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 15416
+  local.get $3
+  i32.const 1
+  i32.shl
   i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
   local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
   local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
   local.get $3
-  i32.le_s
-  if (result i32)
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
    local.get $3
-   i32.const 21
-   i32.le_s
-  else
-   i32.const 0
-  end
-  if
-   local.get $1
-   local.set $4
-   loop $for-loop|0
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
+    i64.sub
     local.get $4
+    i64.ge_u
+   else
+    i32.const 0
+   end
+   if (result i32)
     local.get $3
-    i32.lt_s
-    local.set $5
+    local.get $4
+    i64.add
     local.get $5
-    if
-     local.get $0
-     local.get $4
+    i64.lt_u
+    if (result i32)
      i32.const 1
-     i32.shl
-     i32.add
-     i32.const 48
-     i32.store16
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
      local.get $4
-     i32.const 1
-     i32.add
-     local.set $4
-     br $for-loop|0
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
     end
-   end
-   local.get $0
-   local.get $3
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 46
-   i32.const 48
-   i32.const 16
-   i32.shl
-   i32.or
-   i32.store
-   local.get $3
-   i32.const 2
-   i32.add
-   return
-  else
-   local.get $3
-   i32.const 0
-   i32.gt_s
-   if (result i32)
-    local.get $3
-    i32.const 21
-    i32.le_s
    else
     i32.const 0
    end
+   local.set $8
+   local.get $8
    if
-    local.get $0
-    local.get $3
+    local.get $7
     i32.const 1
-    i32.shl
-    i32.add
-    local.set $4
-    local.get $4
-    i32.const 2
-    i32.add
-    local.get $4
-    i32.const 0
-    local.get $2
     i32.sub
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $0
-    local.get $3
-    i32.const 1
-    i32.shl
-    i32.add
-    i32.const 46
-    i32.store16
-    local.get $1
-    i32.const 1
-    i32.add
-    return
-   else
-    i32.const -6
+    local.set $7
     local.get $3
-    i32.lt_s
-    if (result i32)
-     local.get $3
-     i32.const 0
-     i32.le_s
-    else
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $6
+  local.get $7
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i64)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i32)
+  (local $13 i64)
+  (local $14 i32)
+  (local $15 i32)
+  (local $16 i32)
+  (local $17 i32)
+  (local $18 i32)
+  (local $19 i64)
+  (local $20 i64)
+  i32.const 0
+  local.get $4
+  i32.sub
+  local.set $7
+  i64.const 1
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $8
+  local.get $8
+  i64.const 1
+  i64.sub
+  local.set $9
+  local.get $3
+  local.get $1
+  i64.sub
+  local.set $10
+  local.get $4
+  local.set $11
+  local.get $3
+  local.get $7
+  i64.extend_i32_s
+  i64.shr_u
+  i32.wrap_i64
+  local.set $12
+  local.get $3
+  local.get $9
+  i64.and
+  local.set $13
+  local.get $12
+  call $~lib/util/number/decimalCount32
+  local.set $14
+  local.get $6
+  local.set $15
+  loop $while-continue|0
+   local.get $14
+   i32.const 0
+   i32.gt_s
+   local.set $16
+   local.get $16
+   if
+    block $break|1
+     block $case10|1
+      block $case9|1
+       block $case8|1
+        block $case7|1
+         block $case6|1
+          block $case5|1
+           block $case4|1
+            block $case3|1
+             block $case2|1
+              block $case1|1
+               block $case0|1
+                local.get $14
+                local.set $18
+                local.get $18
+                i32.const 10
+                i32.eq
+                br_if $case0|1
+                local.get $18
+                i32.const 9
+                i32.eq
+                br_if $case1|1
+                local.get $18
+                i32.const 8
+                i32.eq
+                br_if $case2|1
+                local.get $18
+                i32.const 7
+                i32.eq
+                br_if $case3|1
+                local.get $18
+                i32.const 6
+                i32.eq
+                br_if $case4|1
+                local.get $18
+                i32.const 5
+                i32.eq
+                br_if $case5|1
+                local.get $18
+                i32.const 4
+                i32.eq
+                br_if $case6|1
+                local.get $18
+                i32.const 3
+                i32.eq
+                br_if $case7|1
+                local.get $18
+                i32.const 2
+                i32.eq
+                br_if $case8|1
+                local.get $18
+                i32.const 1
+                i32.eq
+                br_if $case9|1
+                br $case10|1
+               end
+               local.get $12
+               i32.const 1000000000
+               i32.div_u
+               local.set $17
+               local.get $12
+               i32.const 1000000000
+               i32.rem_u
+               local.set $12
+               br $break|1
+              end
+              local.get $12
+              i32.const 100000000
+              i32.div_u
+              local.set $17
+              local.get $12
+              i32.const 100000000
+              i32.rem_u
+              local.set $12
+              br $break|1
+             end
+             local.get $12
+             i32.const 10000000
+             i32.div_u
+             local.set $17
+             local.get $12
+             i32.const 10000000
+             i32.rem_u
+             local.set $12
+             br $break|1
+            end
+            local.get $12
+            i32.const 1000000
+            i32.div_u
+            local.set $17
+            local.get $12
+            i32.const 1000000
+            i32.rem_u
+            local.set $12
+            br $break|1
+           end
+           local.get $12
+           i32.const 100000
+           i32.div_u
+           local.set $17
+           local.get $12
+           i32.const 100000
+           i32.rem_u
+           local.set $12
+           br $break|1
+          end
+          local.get $12
+          i32.const 10000
+          i32.div_u
+          local.set $17
+          local.get $12
+          i32.const 10000
+          i32.rem_u
+          local.set $12
+          br $break|1
+         end
+         local.get $12
+         i32.const 1000
+         i32.div_u
+         local.set $17
+         local.get $12
+         i32.const 1000
+         i32.rem_u
+         local.set $12
+         br $break|1
+        end
+        local.get $12
+        i32.const 100
+        i32.div_u
+        local.set $17
+        local.get $12
+        i32.const 100
+        i32.rem_u
+        local.set $12
+        br $break|1
+       end
+       local.get $12
+       i32.const 10
+       i32.div_u
+       local.set $17
+       local.get $12
+       i32.const 10
+       i32.rem_u
+       local.set $12
+       br $break|1
+      end
+      local.get $12
+      local.set $17
+      i32.const 0
+      local.set $12
+      br $break|1
+     end
      i32.const 0
+     local.set $17
+     br $break|1
     end
+    local.get $17
+    local.get $15
+    i32.or
     if
-     i32.const 2
-     local.get $3
-     i32.sub
-     local.set $4
      local.get $0
-     local.get $4
+     local.get $15
+     local.tee $18
      i32.const 1
-     i32.shl
      i32.add
-     local.get $0
-     local.get $1
+     local.set $15
+     local.get $18
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
-     local.get $0
+     i32.add
      i32.const 48
-     i32.const 46
-     i32.const 16
-     i32.shl
-     i32.or
-     i32.store
-     i32.const 2
-     local.set $5
-     loop $for-loop|1
-      local.get $5
-      local.get $4
-      i32.lt_s
-      local.set $6
-      local.get $6
-      if
-       local.get $0
-       local.get $5
-       i32.const 1
-       i32.shl
-       i32.add
-       i32.const 48
-       i32.store16
-       local.get $5
-       i32.const 1
-       i32.add
-       local.set $5
-       br $for-loop|1
-      end
-     end
-     local.get $1
-     local.get $4
+     local.get $17
+     i32.const 65535
+     i32.and
      i32.add
-     return
-    else
-     local.get $1
-     i32.const 1
-     i32.eq
-     if
-      local.get $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      i32.const 4
-      i32.add
-      local.set $5
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $7
-      local.set $1
-      local.get $1
-      i32.const 2
-      i32.add
-      return
-     else
-      local.get $1
-      i32.const 1
-      i32.shl
-      local.set $7
-      local.get $0
-      i32.const 4
-      i32.add
-      local.get $0
-      i32.const 2
-      i32.add
-      local.get $7
-      i32.const 2
-      i32.sub
-      call $~lib/memory/memory.copy
-      local.get $0
-      i32.const 46
-      i32.store16 offset=2
-      local.get $0
-      local.get $7
-      i32.add
-      i32.const 101
-      i32.store16 offset=2
-      local.get $1
-      local.get $0
-      local.get $7
-      i32.add
-      i32.const 4
-      i32.add
-      local.set $9
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
-      i32.add
-      local.set $1
-      local.get $1
-      i32.const 2
-      i32.add
-      return
-     end
-     unreachable
+     i32.store16
+    end
+    local.get $14
+    i32.const 1
+    i32.sub
+    local.set $14
+    local.get $12
+    i64.extend_i32_u
+    local.get $7
+    i64.extend_i32_s
+    i64.shl
+    local.get $13
+    i64.add
+    local.set $19
+    local.get $19
+    local.get $5
+    i64.le_u
+    if
+     global.get $~lib/util/number/_K
+     local.get $14
+     i32.add
+     global.set $~lib/util/number/_K
+     local.get $0
+     local.get $15
+     local.get $5
+     local.get $19
+     i32.const 15592
+     local.get $14
+     i32.const 2
+     i32.shl
+     i32.add
+     i64.load32_u
+     local.get $7
+     i64.extend_i32_s
+     i64.shl
+     local.get $10
+     call $~lib/util/number/grisuRound
+     local.get $15
+     return
     end
-    unreachable
+    br $while-continue|0
+   end
+  end
+  loop $while-continue|2
+   i32.const 1
+   local.set $16
+   local.get $16
+   if
+    local.get $13
+    i64.const 10
+    i64.mul
+    local.set $13
+    local.get $5
+    i64.const 10
+    i64.mul
+    local.set $5
+    local.get $13
+    local.get $7
+    i64.extend_i32_s
+    i64.shr_u
+    local.set $20
+    local.get $20
+    local.get $15
+    i64.extend_i32_s
+    i64.or
+    i64.const 0
+    i64.ne
+    if
+     local.get $0
+     local.get $15
+     local.tee $18
+     i32.const 1
+     i32.add
+     local.set $15
+     local.get $18
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.const 48
+     local.get $20
+     i32.wrap_i64
+     i32.const 65535
+     i32.and
+     i32.add
+     i32.store16
+    end
+    local.get $13
+    local.get $9
+    i64.and
+    local.set $13
+    local.get $14
+    i32.const 1
+    i32.sub
+    local.set $14
+    local.get $13
+    local.get $5
+    i64.lt_u
+    if
+     global.get $~lib/util/number/_K
+     local.get $14
+     i32.add
+     global.set $~lib/util/number/_K
+     local.get $10
+     i32.const 15592
+     i32.const 0
+     local.get $14
+     i32.sub
+     i32.const 2
+     i32.shl
+     i32.add
+     i64.load32_u
+     i64.mul
+     local.set $10
+     local.get $0
+     local.get $15
+     local.get $5
+     local.get $13
+     local.get $8
+     local.get $10
+     call $~lib/util/number/grisuRound
+     local.get $15
+     return
+    end
+    br $while-continue|2
    end
-   unreachable
   end
   unreachable
  )
- (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i32)
-  (local $3 i32)
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
   (local $4 i32)
-  (local $5 f64)
+  (local $5 i64)
   (local $6 i64)
   (local $7 i32)
   (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 i32)
   (local $12 i64)
   (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
-  local.get $1
-  f64.const 0
-  f64.lt
-  local.set $2
-  local.get $2
-  if
-   local.get $1
-   f64.neg
-   local.set $1
-   local.get $0
-   i32.const 45
-   i32.store16
-  end
-  local.get $1
-  local.set $5
+  (local $14 i64)
+  (local $15 i64)
   local.get $0
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   i64.reinterpret_f64
-  local.set $6
-  local.get $6
+  local.set $3
+  local.get $3
   i64.const 9218868437227405312
   i64.and
   i64.const 52
   i64.shr_u
   i32.wrap_i64
-  local.set $7
-  local.get $6
+  local.set $4
+  local.get $3
   i64.const 4503599627370495
   i64.and
-  local.set $8
-  local.get $7
+  local.set $5
+  local.get $4
   i32.const 0
   i32.ne
   i64.extend_i32_u
   i64.const 52
   i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 14720
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 15416
-  local.get $14
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
   i32.const 1
-  i32.shl
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
   i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
   i64.clz
   i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
+  local.set $7
+  local.get $6
+  local.get $7
   i64.extend_i32_s
   i64.shl
-  local.set $9
+  local.set $6
+  local.get $4
   local.get $7
-  local.get $14
   i32.sub
-  local.set $7
+  local.set $4
   global.get $~lib/util/number/_frc_pow
-  local.set $12
+  local.set $8
   global.get $~lib/util/number/_exp_pow
-  local.set $15
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
   local.get $9
-  local.set $17
-  local.get $12
+  call $~lib/util/number/umul64e
   local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
   global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
+  local.get $8
+  call $~lib/util/number/umul64f
   i64.const 1
   i64.sub
-  local.set $25
+  local.set $12
   global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
+  local.get $9
+  call $~lib/util/number/umul64e
   local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $26
   global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
+  local.get $8
+  call $~lib/util/number/umul64f
   i64.const 1
   i64.add
-  local.set $27
-  local.get $25
-  local.get $27
+  local.set $14
+  local.get $12
+  local.get $14
   i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
+  local.set $15
+  local.get $1
   local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.set $2
+  local.get $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
+ )
+ (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $2
+  i32.eqz
+  if
+   local.get $0
+   local.get $1
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 46
+   i32.const 48
+   i32.const 16
+   i32.shl
+   i32.or
+   i32.store
+   local.get $1
+   i32.const 2
+   i32.add
+   return
+  end
+  local.get $1
+  local.get $2
+  i32.add
+  local.set $3
+  local.get $1
   local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
+  i32.le_s
+  if (result i32)
+   local.get $3
+   i32.const 21
+   i32.le_s
+  else
+   i32.const 0
+  end
+  if
+   local.get $1
+   local.set $4
+   loop $for-loop|0
+    local.get $4
+    local.get $3
+    i32.lt_s
+    local.set $5
+    local.get $5
+    if
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.const 48
+     i32.store16
+     local.get $4
+     i32.const 1
+     i32.add
+     local.set $4
+     br $for-loop|0
+    end
+   end
+   local.get $0
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 46
+   i32.const 48
+   i32.const 16
+   i32.shl
+   i32.or
+   i32.store
+   local.get $3
+   i32.const 2
+   i32.add
+   return
+  else
+   local.get $3
+   i32.const 0
+   i32.gt_s
+   if (result i32)
+    local.get $3
+    i32.const 21
+    i32.le_s
+   else
+    i32.const 0
+   end
+   if
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    local.set $4
+    local.get $4
+    i32.const 2
+    i32.add
+    local.get $4
+    i32.const 0
+    local.get $2
+    i32.sub
+    i32.const 1
+    i32.shl
+    call $~lib/memory/memory.copy
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.const 46
+    i32.store16
+    local.get $1
+    i32.const 1
+    i32.add
+    return
+   else
+    i32.const -6
+    local.get $3
+    i32.lt_s
+    if (result i32)
+     local.get $3
+     i32.const 0
+     i32.le_s
+    else
+     i32.const 0
+    end
+    if
+     i32.const 2
+     local.get $3
+     i32.sub
+     local.set $4
+     local.get $0
+     local.get $4
+     i32.const 1
+     i32.shl
+     i32.add
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.shl
+     call $~lib/memory/memory.copy
+     local.get $0
+     i32.const 48
+     i32.const 46
+     i32.const 16
+     i32.shl
+     i32.or
+     i32.store
+     i32.const 2
+     local.set $5
+     loop $for-loop|1
+      local.get $5
+      local.get $4
+      i32.lt_s
+      local.set $6
+      local.get $6
+      if
+       local.get $0
+       local.get $5
+       i32.const 1
+       i32.shl
+       i32.add
+       i32.const 48
+       i32.store16
+       local.get $5
+       i32.const 1
+       i32.add
+       local.set $5
+       br $for-loop|1
+      end
+     end
+     local.get $1
+     local.get $4
+     i32.add
+     return
+    else
+     local.get $1
+     i32.const 1
+     i32.eq
+     if
+      local.get $0
+      i32.const 101
+      i32.store16 offset=2
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     else
+      local.get $1
+      i32.const 1
+      i32.shl
+      local.set $4
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $0
+      i32.const 2
+      i32.add
+      local.get $4
+      i32.const 2
+      i32.sub
+      call $~lib/memory/memory.copy
+      local.get $0
+      i32.const 46
+      i32.store16 offset=2
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 101
+      i32.store16 offset=2
+      local.get $1
+      local.get $0
+      local.get $4
+      i32.add
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      i32.add
+      local.set $1
+      local.get $1
+      i32.const 2
+      i32.add
+      return
+     end
+     unreachable
+    end
+    unreachable
+   end
+   unreachable
+  end
+  unreachable
+ )
+ (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  f64.const 0
+  f64.lt
+  local.set $2
+  local.get $2
+  if
+   local.get $1
+   f64.neg
+   local.set $1
+   local.get $0
+   i32.const 45
+   i32.store16
+  end
+  local.get $1
+  local.get $0
+  local.get $2
+  call $~lib/util/number/grisu2
+  local.set $3
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
diff --git a/tests/compiler/std/symbol.optimized.wat b/tests/compiler/std/symbol.optimized.wat
index d52f3c51f4..dd79b73c9d 100644
--- a/tests/compiler/std/symbol.optimized.wat
+++ b/tests/compiler/std/symbol.optimized.wat
@@ -1,7 +1,7 @@
 (module
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
- (type $i32_i32_=>_none (func (param i32 i32)))
  (type $none_=>_none (func))
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
@@ -148,161 +148,171 @@
   i32.store offset=12
   local.get $4
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32)
   (local $2 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $1
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8
-   local.get $0
-   local.get $1
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $2
-   i32.const 0
-   i32.store8 offset=3
-   local.get $1
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=1
-   local.get $0
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=2
-   local.get $2
-   i32.const 0
-   i32.store8 offset=1
-   local.get $1
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store8 offset=3
-   local.get $2
-   i32.const 0
-   i32.store8
-   local.get $1
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $2
-   i32.add
-   local.tee $0
-   i32.const 0
-   i32.store
-   local.get $0
-   local.get $1
-   local.get $2
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   i32.const 0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=4
-   local.get $0
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=16
-   local.get $1
-   i32.const 0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   i32.const 0
-   i32.store offset=16
-   local.get $0
-   i32.const 0
-   i32.store offset=20
-   local.get $0
-   i32.const 0
-   i32.store offset=24
-   local.get $1
-   i32.const 0
-   i32.store
-   local.get $1
-   i32.const 0
-   i32.store offset=4
-   local.get $1
-   i32.const 0
-   i32.store offset=8
-   local.get $1
-   i32.const 0
-   i32.store offset=12
-   local.get $0
-   local.get $0
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $1
-   i32.add
-   local.set $0
-   local.get $2
+  local.get $1
+  i32.eqz
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 4
+  i32.sub
+  local.tee $2
+  i32.const 0
+  i32.store8 offset=3
+  local.get $1
+  i32.const 2
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=1
+  local.get $0
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=2
+  local.get $2
+  i32.const 0
+  i32.store8 offset=1
+  local.get $1
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store8 offset=3
+  local.get $2
+  i32.const 0
+  i32.store8
+  local.get $1
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $2
+  i32.add
+  local.tee $0
+  i32.const 0
+  i32.store
+  local.get $0
+  local.get $1
+  local.get $2
+  i32.sub
+  i32.const -4
+  i32.and
+  local.tee $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $1
+  i32.const 0
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=16
+  local.get $1
+  i32.const 0
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  i32.const 0
+  i32.store offset=16
+  local.get $0
+  i32.const 0
+  i32.store offset=20
+  local.get $0
+  i32.const 0
+  i32.store offset=24
+  local.get $1
+  i32.const 0
+  i32.store
+  local.get $1
+  i32.const 0
+  i32.store offset=4
+  local.get $1
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  i32.const 0
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $1
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $1
+  i32.sub
+  local.set $1
+  loop $while-continue|0
    local.get $1
-   i32.sub
-   local.set $1
-   loop $while-continue|0
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    i64.const 0
+    i64.store
+    local.get $0
+    i64.const 0
+    i64.store offset=8
+    local.get $0
+    i64.const 0
+    i64.store offset=16
+    local.get $0
+    i64.const 0
+    i64.store offset=24
     local.get $1
     i32.const 32
-    i32.ge_u
-    if
-     local.get $0
-     i64.const 0
-     i64.store
-     local.get $0
-     i64.const 0
-     i64.store offset=8
-     local.get $0
-     i64.const 0
-     i64.store offset=16
-     local.get $0
-     i64.const 0
-     i64.store offset=24
-     local.get $1
-     i32.const 32
-     i32.sub
-     local.set $1
-     local.get $0
-     i32.const 32
-     i32.add
-     local.set $0
-     br $while-continue|0
-    end
+    i32.sub
+    local.set $1
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
    end
   end
  )
@@ -324,7 +334,7 @@
   call $~lib/rt/stub/__alloc
   local.tee $1
   local.get $0
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $1
  )
  (func $~lib/map/Map<~lib/string/String,usize>#clear (param $0 i32)
@@ -360,14 +370,6 @@
   i32.const 0
   i32.store offset=20
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/hash/hashStr (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -377,7 +379,11 @@
   local.get $0
   if
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.const 1
    i32.shl
    local.set $3
@@ -386,11 +392,11 @@
     local.get $3
     i32.lt_u
     if
+     local.get $1
      local.get $0
      local.get $2
      i32.add
      i32.load8_u
-     local.get $1
      i32.xor
      i32.const 16777619
      i32.mul
@@ -498,10 +504,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -611,6 +625,7 @@
      i32.load offset=4
      i32.store offset=4
      local.get $2
+     local.get $5
      local.get $4
      i32.load
      call $~lib/util/hash/hashStr
@@ -618,7 +633,6 @@
      i32.and
      i32.const 2
      i32.shl
-     local.get $5
      i32.add
      local.tee $8
      i32.load
@@ -665,10 +679,12 @@
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  local.get $0
   i32.const 1040
   call $~lib/util/hash/hashStr
-  local.tee $3
+  local.tee $2
+  local.set $3
+  local.get $0
+  local.get $2
   call $~lib/map/Map<~lib/string/String,usize>#find
   local.tee $2
   if
@@ -877,6 +893,7 @@
      i32.load offset=4
      i32.store offset=4
      local.get $2
+     local.get $5
      local.get $4
      i32.load
      call $~lib/util/hash/hash32
@@ -884,7 +901,6 @@
      i32.and
      i32.const 2
      i32.shl
-     local.get $5
      i32.add
      local.tee $8
      i32.load
@@ -1039,7 +1055,7 @@
     if
      i32.const 1232
      i32.const 1296
-     i32.const 111
+     i32.const 109
      i32.const 17
      call $~lib/builtins/abort
      unreachable
@@ -1118,15 +1134,6 @@
   call $~lib/map/Map<usize,~lib/string/String>#set
   local.get $0
  )
- (func $~lib/map/Map<usize,~lib/string/String>#has (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  local.get $1
-  local.get $1
-  call $~lib/util/hash/hash32
-  call $~lib/map/Map<usize,~lib/string/String>#find
-  i32.const 0
-  i32.ne
- )
  (func $~lib/map/Map<usize,~lib/string/String>#get (param $0 i32) (param $1 i32) (result i32)
   local.get $0
   local.get $1
@@ -1138,7 +1145,7 @@
   if
    i32.const 1232
    i32.const 1296
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
@@ -1151,7 +1158,9 @@
   if (result i32)
    global.get $~lib/symbol/idToString
    local.get $0
-   call $~lib/map/Map<usize,~lib/string/String>#has
+   local.get $0
+   call $~lib/util/hash/hash32
+   call $~lib/map/Map<usize,~lib/string/String>#find
   else
    i32.const 0
   end
@@ -1163,225 +1172,228 @@
    i32.const 0
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
- (func $~lib/string/String.__concat (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $__inlined_func$~lib/string/String#concat
-   local.get $0
-   i32.const 1840
-   local.get $0
-   select
-   local.tee $3
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $2
-   local.get $1
-   i32.const 1840
-   local.get $1
-   select
-   local.tee $1
-   call $~lib/string/String#get:length
-   i32.const 1
-   i32.shl
-   local.tee $4
-   i32.add
-   local.tee $0
-   i32.eqz
-   if
-    i32.const 1344
-    local.set $0
-    br $__inlined_func$~lib/string/String#concat
-   end
-   local.get $0
-   i32.const 1
-   call $~lib/rt/stub/__alloc
-   local.tee $0
-   local.get $3
-   local.get $2
-   call $~lib/memory/memory.copy
-   local.get $0
-   local.get $2
-   i32.add
-   local.get $1
-   local.get $4
-   call $~lib/memory/memory.copy
+  local.get $1
+  i32.const 1840
+  local.get $1
+  select
+  local.tee $3
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $4
+  local.get $0
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
+  i32.const 1
+  i32.shl
+  local.tee $1
+  i32.add
+  local.tee $2
+  i32.eqz
+  if
+   i32.const 1344
+   return
   end
+  local.get $2
+  i32.const 1
+  call $~lib/rt/stub/__alloc
+  local.tee $2
   local.get $0
+  local.get $1
+  call $~lib/util/memory/memmove
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $3
+  local.get $4
+  call $~lib/util/memory/memmove
+  local.get $2
  )
  (func $~lib/symbol/_Symbol#toString (param $0 i32) (result i32)
   i32.const 1808
@@ -1443,7 +1455,9 @@
    if (result i32)
     global.get $~lib/symbol/idToString
     local.get $0
-    call $~lib/map/Map<usize,~lib/string/String>#has
+    local.get $0
+    call $~lib/util/hash/hash32
+    call $~lib/map/Map<usize,~lib/string/String>#find
    else
     i32.const 0
    end
@@ -1455,9 +1469,13 @@
     i32.const 1344
    end
   end
-  call $~lib/string/String.__concat
+  call $~lib/string/String#concat
+  local.tee $0
+  i32.const 1840
+  local.get $0
+  select
   i32.const 1872
-  call $~lib/string/String.__concat
+  call $~lib/string/String#concat
  )
  (func $start:std/symbol
   (local $0 i32)
diff --git a/tests/compiler/std/symbol.untouched.wat b/tests/compiler/std/symbol.untouched.wat
index c042d623fb..8865526d6e 100644
--- a/tests/compiler/std/symbol.untouched.wat
+++ b/tests/compiler/std/symbol.untouched.wat
@@ -1,9 +1,10 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_=>_none (func (param i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $none_=>_none (func))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
@@ -196,278 +197,296 @@
   i32.store offset=12
   local.get $2
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
-    i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
-   end
+  i32.const 0
+  i32.const 1
+  i32.gt_s
+  drop
+  local.get $2
+  i32.eqz
+  if
+   return
   end
- )
- (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 4
+  i32.sub
+  local.set $3
+  local.get $0
   local.get $1
-  i32.const 1073741808
-  i32.gt_u
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
   if
-   i32.const 112
-   i32.const 160
-   i32.const 49
-   i32.const 43
-   call $~lib/builtins/abort
-   unreachable
+   return
   end
+  local.get $0
   local.get $1
-  i32.const 0
-  call $~lib/rt/stub/__alloc
-  local.set $2
-  local.get $2
-  i32.const 0
+  i32.store8 offset=1
+  local.get $0
   local.get $1
-  call $~lib/memory/memory.fill
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
   local.get $2
-  call $~lib/rt/stub/__retain
- )
- (func $~lib/map/Map<~lib/string/String,usize>#clear (param $0 i32)
-  (local $1 i32)
-  (local $2 i32)
+  i32.const 6
+  i32.le_u
+  if
+   return
+  end
   local.get $0
-  local.tee $1
-  i32.const 0
-  i32.const 16
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $2
   local.get $1
-  i32.load
-  call $~lib/rt/stub/__release
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
   local.get $2
-  i32.store
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  i32.const 0
   local.get $0
-  i32.const 4
-  i32.const 1
   i32.sub
-  i32.store offset=4
+  i32.const 3
+  i32.and
+  local.set $4
   local.get $0
-  local.tee $2
-  i32.const 0
-  i32.const 48
-  call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.get $4
+  i32.add
+  local.set $0
   local.get $2
-  i32.load offset=8
-  call $~lib/rt/stub/__release
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
   local.get $1
-  i32.store offset=8
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
   local.get $0
-  i32.const 4
-  i32.store offset=12
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
   local.get $0
-  i32.const 0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
+   local.set $7
+   local.get $7
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
+    i32.const 32
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
+   end
+  end
+ )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
+ (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  i32.const 1073741808
+  i32.gt_u
+  if
+   i32.const 112
+   i32.const 160
+   i32.const 49
+   i32.const 43
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/rt/stub/__alloc
+  local.set $2
+  local.get $2
+  i32.const 0
+  local.get $1
+  call $~lib/memory/memory.fill
+  local.get $2
+  call $~lib/rt/stub/__retain
+ )
+ (func $~lib/map/ENTRY_ALIGN<~lib/string/String,usize> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<~lib/string/String,usize> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<~lib/string/String,usize>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
+ (func $~lib/map/Map<~lib/string/String,usize>#clear (param $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $0
+  local.tee $1
+  i32.const 0
+  i32.const 16
+  call $~lib/arraybuffer/ArrayBuffer#constructor
+  local.set $2
+  local.get $1
+  i32.load
+  call $~lib/rt/stub/__release
+  local.get $2
+  i32.store
+  local.get $0
+  i32.const 4
+  i32.const 1
+  i32.sub
+  i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<~lib/string/String,usize>
+  i32.mul
+  local.set $1
+  local.get $0
+  local.tee $2
+  i32.const 0
+  local.get $1
+  call $~lib/arraybuffer/ArrayBuffer#constructor
+  local.set $3
+  local.get $2
+  i32.load offset=8
+  call $~lib/rt/stub/__release
+  local.get $3
+  i32.store offset=8
+  local.get $0
+  i32.const 4
+  i32.store offset=12
+  local.get $0
+  i32.const 0
   i32.store offset=16
   local.get $0
   i32.const 0
@@ -505,9 +524,28 @@
   call $~lib/map/Map<~lib/string/String,usize>#clear
   local.get $0
  )
+ (func $~lib/map/ENTRY_ALIGN<usize,~lib/string/String> (result i32)
+  i32.const 3
+ )
+ (func $~lib/map/ENTRY_SIZE<usize,~lib/string/String> (result i32)
+  (local $0 i32)
+  (local $1 i32)
+  call $~lib/map/ENTRY_ALIGN<usize,~lib/string/String>
+  local.set $0
+  i32.const 12
+  local.get $0
+  i32.add
+  local.get $0
+  i32.const -1
+  i32.xor
+  i32.and
+  local.set $1
+  local.get $1
+ )
  (func $~lib/map/Map<usize,~lib/string/String>#clear (param $0 i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   local.tee $1
   i32.const 0
@@ -524,16 +562,20 @@
   i32.const 1
   i32.sub
   i32.store offset=4
+  i32.const 4
+  call $~lib/map/ENTRY_SIZE<usize,~lib/string/String>
+  i32.mul
+  local.set $1
   local.get $0
   local.tee $2
   i32.const 0
-  i32.const 48
+  local.get $1
   call $~lib/arraybuffer/ArrayBuffer#constructor
-  local.set $1
+  local.set $3
   local.get $2
   i32.load offset=8
   call $~lib/rt/stub/__release
-  local.get $1
+  local.get $3
   i32.store offset=8
   local.get $0
   i32.const 4
@@ -636,6 +678,21 @@
   call $~lib/rt/stub/__release
   local.get $3
  )
+ (func $~lib/util/hash/HASH<~lib/string/String> (param $0 i32) (result i32)
+  (local $1 i32)
+  local.get $0
+  call $~lib/rt/stub/__retain
+  local.set $0
+  i32.const 1
+  drop
+  local.get $0
+  call $~lib/util/hash/hashStr
+  local.set $1
+  local.get $0
+  call $~lib/rt/stub/__release
+  local.get $1
+  return
+ )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (param $4 i32) (result i32)
   (local $5 i32)
   (local $6 i32)
@@ -897,26 +954,13 @@
  )
  (func $~lib/map/Map<~lib/string/String,usize>#has (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i32)
   local.get $1
   call $~lib/rt/stub/__retain
   local.set $1
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<~lib/string/String>|inlined.0 (result i32)
-   local.get $1
-   call $~lib/rt/stub/__retain
-   local.set $2
-   i32.const 1
-   drop
-   local.get $2
-   call $~lib/util/hash/hashStr
-   local.set $3
-   local.get $2
-   call $~lib/rt/stub/__release
-   local.get $3
-   br $~lib/util/hash/HASH<~lib/string/String>|inlined.0
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<~lib/string/String>
   call $~lib/map/Map<~lib/string/String,usize>#find
   i32.const 0
   i32.ne
@@ -928,46 +972,33 @@
  (func $~lib/map/Map<~lib/string/String,usize>#get (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
   local.get $1
   call $~lib/rt/stub/__retain
   local.set $1
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<~lib/string/String>|inlined.1 (result i32)
-   local.get $1
-   call $~lib/rt/stub/__retain
-   local.set $2
-   i32.const 1
-   drop
-   local.get $2
-   call $~lib/util/hash/hashStr
-   local.set $3
-   local.get $2
-   call $~lib/rt/stub/__release
-   local.get $3
-   br $~lib/util/hash/HASH<~lib/string/String>|inlined.1
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<~lib/string/String>
   call $~lib/map/Map<~lib/string/String,usize>#find
-  local.set $4
-  local.get $4
+  local.set $2
+  local.get $2
   i32.eqz
   if
    local.get $1
    call $~lib/rt/stub/__release
    i32.const 224
    i32.const 288
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $2
   i32.load offset=4
-  local.set $2
+  local.set $3
   local.get $1
   call $~lib/rt/stub/__release
-  local.get $2
+  local.get $3
  )
  (func $~lib/map/Map<~lib/string/String,usize>#rehash (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1000,7 +1031,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<~lib/string/String,usize>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -1010,7 +1041,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<~lib/string/String,usize>
   i32.mul
   i32.add
   local.set $7
@@ -1041,21 +1072,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<~lib/string/String>|inlined.3 (result i32)
-      local.get $10
-      i32.load
-      call $~lib/rt/stub/__retain
-      local.set $12
-      i32.const 1
-      drop
-      local.get $12
-      call $~lib/util/hash/hashStr
-      local.set $13
-      local.get $12
-      call $~lib/rt/stub/__release
-      local.get $13
-      br $~lib/util/hash/HASH<~lib/string/String>|inlined.3
-     end
+     local.get $10
+     i32.load
+     call $~lib/util/hash/HASH<~lib/string/String>
      local.get $1
      i32.and
      local.set $12
@@ -1073,12 +1092,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<~lib/string/String,usize>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<~lib/string/String,usize>
     i32.add
     local.set $6
     br $while-continue|0
@@ -1141,31 +1160,19 @@
   local.get $1
   call $~lib/rt/stub/__retain
   local.set $1
-  block $~lib/util/hash/HASH<~lib/string/String>|inlined.2 (result i32)
-   local.get $1
-   call $~lib/rt/stub/__retain
-   local.set $3
-   i32.const 1
-   drop
-   local.get $3
-   call $~lib/util/hash/hashStr
-   local.set $4
-   local.get $3
-   call $~lib/rt/stub/__release
-   local.get $4
-   br $~lib/util/hash/HASH<~lib/string/String>|inlined.2
-  end
-  local.set $5
+  local.get $1
+  call $~lib/util/hash/HASH<~lib/string/String>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $5
+  local.get $3
   call $~lib/map/Map<~lib/string/String,usize>#find
-  local.set $6
-  local.get $6
+  local.set $4
+  local.get $4
   if
    i32.const 0
    drop
-   local.get $6
+   local.get $4
    local.get $2
    i32.store offset=4
   else
@@ -1201,25 +1208,25 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/stub/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
-   local.tee $4
+   local.tee $6
    i32.const 1
    i32.add
    i32.store offset=16
-   local.get $4
-   i32.const 12
+   local.get $6
+   call $~lib/map/ENTRY_SIZE<~lib/string/String,usize>
    i32.mul
    i32.add
-   local.set $6
-   local.get $6
+   local.set $4
+   local.get $4
    local.get $1
    call $~lib/rt/stub/__retain
    i32.store
-   local.get $6
+   local.get $4
    local.get $2
    i32.store offset=4
    local.get $0
@@ -1230,30 +1237,30 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $5
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
    i32.const 4
    i32.mul
    i32.add
-   local.set $4
-   local.get $6
+   local.set $6
    local.get $4
+   local.get $6
    i32.load
    i32.store offset=8
-   local.get $4
    local.get $6
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/stub/__release
   end
   local.get $0
   call $~lib/rt/stub/__retain
-  local.set $4
+  local.set $6
   local.get $1
   call $~lib/rt/stub/__release
-  local.get $4
+  local.get $6
  )
  (func $~lib/util/hash/hash32 (param $0 i32) (result i32)
   (local $1 i32)
@@ -1297,6 +1304,29 @@
   local.set $1
   local.get $1
  )
+ (func $~lib/util/hash/HASH<usize> (param $0 i32) (result i32)
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 0
+  drop
+  i32.const 4
+  i32.const 1
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 2
+  i32.eq
+  drop
+  i32.const 4
+  i32.const 4
+  i32.eq
+  drop
+  local.get $0
+  call $~lib/util/hash/hash32
+  return
+ )
  (func $~lib/map/Map<usize,~lib/string/String>#find (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -1376,7 +1406,7 @@
   local.set $4
   i32.const 0
   local.get $4
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<usize,~lib/string/String>
   i32.mul
   call $~lib/arraybuffer/ArrayBuffer#constructor
   local.set $5
@@ -1386,7 +1416,7 @@
   local.get $6
   local.get $0
   i32.load offset=16
-  i32.const 12
+  call $~lib/map/ENTRY_SIZE<usize,~lib/string/String>
   i32.mul
   i32.add
   local.set $7
@@ -1417,32 +1447,9 @@
      local.get $10
      i32.load offset=4
      i32.store offset=4
-     block $~lib/util/hash/HASH<usize>|inlined.1 (result i32)
-      local.get $10
-      i32.load
-      local.set $12
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 0
-      drop
-      i32.const 4
-      i32.const 1
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 2
-      i32.eq
-      drop
-      i32.const 4
-      i32.const 4
-      i32.eq
-      drop
-      local.get $12
-      call $~lib/util/hash/hash32
-      br $~lib/util/hash/HASH<usize>|inlined.1
-     end
+     local.get $10
+     i32.load
+     call $~lib/util/hash/HASH<usize>
      local.get $1
      i32.and
      local.set $12
@@ -1460,12 +1467,12 @@
      local.get $8
      i32.store
      local.get $8
-     i32.const 12
+     call $~lib/map/ENTRY_SIZE<usize,~lib/string/String>
      i32.add
      local.set $8
     end
     local.get $6
-    i32.const 12
+    call $~lib/map/ENTRY_SIZE<usize,~lib/string/String>
     i32.add
     local.set $6
     br $while-continue|0
@@ -1528,53 +1535,30 @@
   local.get $2
   call $~lib/rt/stub/__retain
   local.set $2
-  block $~lib/util/hash/HASH<usize>|inlined.0 (result i32)
-   local.get $1
-   local.set $3
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $3
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<usize>|inlined.0
-  end
-  local.set $4
+  local.get $1
+  call $~lib/util/hash/HASH<usize>
+  local.set $3
   local.get $0
   local.get $1
-  local.get $4
+  local.get $3
   call $~lib/map/Map<usize,~lib/string/String>#find
-  local.set $5
-  local.get $5
+  local.set $4
+  local.get $4
   if
    i32.const 1
    drop
-   local.get $5
+   local.get $4
    i32.load offset=4
-   local.set $3
+   local.set $5
    local.get $2
-   local.get $3
+   local.get $5
    i32.ne
    if
-    local.get $5
+    local.get $4
     local.get $2
     call $~lib/rt/stub/__retain
     i32.store offset=4
-    local.get $3
+    local.get $5
     call $~lib/rt/stub/__release
    end
   else
@@ -1610,8 +1594,8 @@
    local.get $0
    i32.load offset=8
    call $~lib/rt/stub/__retain
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    local.get $0
    local.get $0
    i32.load offset=16
@@ -1620,14 +1604,14 @@
    i32.add
    i32.store offset=16
    local.get $6
-   i32.const 12
+   call $~lib/map/ENTRY_SIZE<usize,~lib/string/String>
    i32.mul
    i32.add
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    local.get $1
    i32.store
-   local.get $5
+   local.get $4
    local.get $2
    call $~lib/rt/stub/__retain
    i32.store offset=4
@@ -1639,7 +1623,7 @@
    i32.store offset=20
    local.get $0
    i32.load
-   local.get $4
+   local.get $3
    local.get $0
    i32.load offset=4
    i32.and
@@ -1647,14 +1631,14 @@
    i32.mul
    i32.add
    local.set $6
-   local.get $5
+   local.get $4
    local.get $6
    i32.load
    i32.store offset=8
    local.get $6
-   local.get $5
+   local.get $4
    i32.store
-   local.get $3
+   local.get $5
    call $~lib/rt/stub/__release
   end
   local.get $0
@@ -1731,81 +1715,33 @@
   local.get $1
  )
  (func $~lib/map/Map<usize,~lib/string/String>#has (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<usize>|inlined.2 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<usize>|inlined.2
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<usize>
   call $~lib/map/Map<usize,~lib/string/String>#find
   i32.const 0
   i32.ne
  )
  (func $~lib/map/Map<usize,~lib/string/String>#get (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i32)
   local.get $0
   local.get $1
-  block $~lib/util/hash/HASH<usize>|inlined.3 (result i32)
-   local.get $1
-   local.set $2
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 0
-   drop
-   i32.const 4
-   i32.const 1
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 2
-   i32.eq
-   drop
-   i32.const 4
-   i32.const 4
-   i32.eq
-   drop
-   local.get $2
-   call $~lib/util/hash/hash32
-   br $~lib/util/hash/HASH<usize>|inlined.3
-  end
+  local.get $1
+  call $~lib/util/hash/HASH<usize>
   call $~lib/map/Map<usize,~lib/string/String>#find
-  local.set $3
-  local.get $3
+  local.set $2
+  local.get $2
   i32.eqz
   if
    i32.const 224
    i32.const 288
-   i32.const 111
+   i32.const 109
    i32.const 17
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.load offset=4
   call $~lib/rt/stub/__retain
  )
@@ -2853,238 +2789,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
      end
     end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
+     end
+    end
+   end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
    end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/string/String#concat (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
diff --git a/tests/compiler/std/typedarray.optimized.wat b/tests/compiler/std/typedarray.optimized.wat
index 2e7da3d719..c0bae12ef8 100644
--- a/tests/compiler/std/typedarray.optimized.wat
+++ b/tests/compiler/std/typedarray.optimized.wat
@@ -1,6 +1,6 @@
 (module
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $none_=>_none (func))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
@@ -8,10 +8,11 @@
  (type $i32_=>_none (func (param i32)))
  (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
- (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32)))
  (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32)))
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
  (type $i64_i64_i32_i32_=>_i64 (func (param i64 i64 i32 i32) (result i64)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_i64_=>_none (func (param i32 i32 i64)))
  (type $i64_i32_i32_=>_none (func (param i64 i32 i32)))
  (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32)))
@@ -19,7 +20,8 @@
  (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i64_=>_i32 (func (param i64) (result i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_i32_f32_=>_none (func (param i32 i32 f32)))
  (type $i32_i32_f64_=>_none (func (param i32 i32 f64)))
  (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
@@ -29,12 +31,12 @@
  (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32)))
  (type $i32_i64_=>_i32 (func (param i32 i64) (result i32)))
- (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
+ (type $i32_i64_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i64 i32 i64 i32) (result i32)))
  (type $i32_f32_=>_i32 (func (param i32 f32) (result i32)))
- (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
  (type $f64_f64_=>_i32 (func (param f64 f64) (result i32)))
  (type $i64_i32_i32_=>_i64 (func (param i64 i32 i32) (result i64)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
  (type $f32_=>_f32 (func (param f32) (result f32)))
  (type $f32_i32_i32_=>_f32 (func (param f32 i32 i32) (result f32)))
@@ -207,6 +209,31 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -221,7 +248,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -243,7 +270,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -262,23 +289,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -286,61 +313,53 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -348,9 +367,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -359,7 +376,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -382,7 +399,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -396,7 +413,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -409,9 +426,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -420,7 +437,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -429,7 +446,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -447,9 +464,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -469,7 +486,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -502,8 +519,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -524,27 +541,27 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1152
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -573,13 +590,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -587,21 +604,15 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -616,31 +627,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -670,7 +678,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -687,7 +695,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -715,7 +723,7 @@
    if
     i32.const 0
     i32.const 1152
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -767,7 +775,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -788,7 +796,8 @@
     unreachable
    end
    i32.const 8336
-   local.tee $0
+   local.set $2
+   i32.const 8336
    i32.const 0
    i32.store
    i32.const 9904
@@ -807,27 +816,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 8336
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -847,7 +850,7 @@
    i32.const 8336
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/prepareSize (param $0 i32) (result i32)
   local.get $0
@@ -856,7 +859,7 @@
   if
    i32.const 1200
    i32.const 1152
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -875,6 +878,7 @@
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -884,23 +888,22 @@
    i32.shr_u
    local.set $1
   else
+   local.get $1
+   i32.const 1
+   i32.const 27
+   local.get $1
+   i32.clz
+   i32.sub
+   i32.shl
+   i32.add
+   i32.const 1
+   i32.sub
+   local.get $1
    local.get $1
    i32.const 536870904
    i32.lt_u
-   if
-    local.get $1
-    i32.const 1
-    i32.const 27
-    local.get $1
-    i32.clz
-    i32.sub
-    i32.shl
-    i32.add
-    i32.const 1
-    i32.sub
-    local.set $1
-   end
-   local.get $1
+   select
+   local.tee $1
    i32.const 31
    local.get $1
    i32.clz
@@ -929,7 +932,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -947,16 +950,10 @@
   local.tee $1
   if (result i32)
    local.get $0
+   local.get $2
    local.get $1
    i32.ctz
-   local.get $2
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -977,26 +974,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1152
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -1014,7 +1007,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1059,13 +1052,14 @@
    local.get $1
    i32.const 16
    i32.add
-   local.tee $0
    local.get $1
    i32.load
    i32.const -4
    i32.and
    i32.add
-   local.get $0
+   local.get $1
+   i32.const 16
+   i32.add
    local.get $1
    i32.load
    i32.const -4
@@ -1085,7 +1079,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1176,7 +1170,7 @@
     if
      i32.const 0
      i32.const 1152
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -1192,7 +1186,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1217,297 +1211,292 @@
   call $~lib/rt/rtrace/onalloc
   local.get $3
  )
- (func $~lib/rt/tlsf/__alloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
+  (local $3 i32)
+  (local $4 i64)
+  local.get $2
+  i32.eqz
+  if
+   return
+  end
   local.get $0
   local.get $1
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
+  i32.store8
+  local.get $0
+  local.get $2
   i32.add
- )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i64)
-  (local $5 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $2
-   i32.eqz
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.get $1
-   i32.store8
-   local.get $0
-   local.get $2
-   i32.add
-   i32.const 4
-   i32.sub
-   local.tee $3
-   local.get $1
-   i32.store8 offset=3
-   local.get $2
-   i32.const 2
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.get $1
-   i32.store8 offset=1
-   local.get $0
-   local.get $1
-   i32.store8 offset=2
-   local.get $3
-   local.get $1
-   i32.store8 offset=2
-   local.get $3
-   local.get $1
-   i32.store8 offset=1
-   local.get $2
-   i32.const 6
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.get $1
-   i32.store8 offset=3
-   local.get $3
-   local.get $1
-   i32.store8
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $0
-   i32.const 0
-   local.get $0
-   i32.sub
-   i32.const 3
-   i32.and
-   local.tee $5
-   i32.add
-   local.tee $3
-   local.get $1
-   i32.const 255
-   i32.and
-   i32.const 16843009
-   i32.mul
-   local.tee $0
-   i32.store
-   local.get $3
-   local.get $2
-   local.get $5
-   i32.sub
-   i32.const -4
-   i32.and
-   local.tee $2
-   i32.add
-   i32.const 28
-   i32.sub
-   local.tee $1
-   local.get $0
-   i32.store offset=24
-   local.get $2
-   i32.const 8
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $3
-   local.get $0
-   i32.store offset=4
-   local.get $3
-   local.get $0
-   i32.store offset=8
-   local.get $1
-   local.get $0
-   i32.store offset=16
-   local.get $1
-   local.get $0
-   i32.store offset=20
-   local.get $2
-   i32.const 24
-   i32.le_u
-   br_if $~lib/util/memory/memset|inlined.0
-   local.get $3
-   local.get $0
-   i32.store offset=12
-   local.get $3
-   local.get $0
-   i32.store offset=16
-   local.get $3
-   local.get $0
-   i32.store offset=20
-   local.get $3
-   local.get $0
-   i32.store offset=24
-   local.get $1
-   local.get $0
-   i32.store
-   local.get $1
-   local.get $0
-   i32.store offset=4
-   local.get $1
-   local.get $0
-   i32.store offset=8
-   local.get $1
-   local.get $0
-   i32.store offset=12
-   local.get $3
-   local.get $3
-   i32.const 4
-   i32.and
-   i32.const 24
-   i32.add
-   local.tee $3
-   i32.add
-   local.set $1
-   local.get $2
-   local.get $3
-   i32.sub
-   local.set $2
-   local.get $0
-   i64.extend_i32_u
-   local.get $0
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $4
-   loop $while-continue|0
-    local.get $2
-    i32.const 32
-    i32.ge_u
-    if
-     local.get $1
-     local.get $4
-     i64.store
-     local.get $1
-     local.get $4
-     i64.store offset=8
-     local.get $1
-     local.get $4
-     i64.store offset=16
-     local.get $1
-     local.get $4
-     i64.store offset=24
-     local.get $2
-     i32.const 32
-     i32.sub
-     local.set $2
-     local.get $1
-     i32.const 32
-     i32.add
-     local.set $1
-     br $while-continue|0
-    end
-   end
-  end
- )
- (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
-  (local $1 i32)
-  (local $2 i32)
-  local.get $0
-  i32.const 8332
-  i32.gt_u
+  i32.const 4
+  i32.sub
+  local.tee $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
   if
-   local.get $0
-   i32.const 16
-   i32.sub
-   local.tee $1
-   i32.load offset=4
-   local.tee $2
-   i32.const -268435456
-   i32.and
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.const -268435456
-   i32.and
-   i32.ne
-   if
-    i32.const 0
-    i32.const 1264
-    i32.const 109
-    i32.const 3
-    call $~lib/builtins/abort
-    unreachable
-   end
-   local.get $1
-   local.get $2
-   i32.const 1
-   i32.add
-   i32.store offset=4
-   local.get $1
-   call $~lib/rt/rtrace/onincrement
-   local.get $1
-   i32.load
-   i32.const 1
-   i32.and
-   if
-    i32.const 0
-    i32.const 1264
-    i32.const 112
-    i32.const 14
-    call $~lib/builtins/abort
-    unreachable
-   end
+   return
   end
   local.get $0
- )
- (func $~lib/rt/pure/__release (param $0 i32)
+  local.get $1
+  i32.store8 offset=1
   local.get $0
-  i32.const 8332
-  i32.gt_u
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
+  local.get $2
+  i32.const 6
+  i32.le_u
   if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
+   return
   end
- )
- (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
+  local.get $0
   local.get $1
-  i32.const 1073741808
+  i32.store8 offset=3
+  local.get $3
+  local.get $1
+  i32.store8
   local.get $2
-  i32.shr_u
-  i32.gt_u
+  i32.const 8
+  i32.le_u
   if
-   i32.const 1040
-   i32.const 1088
-   i32.const 18
-   i32.const 57
-   call $~lib/builtins/abort
-   unreachable
+   return
   end
+  local.get $0
+  i32.const 0
+  local.get $0
+  i32.sub
+  i32.const 3
+  i32.and
+  local.tee $3
+  i32.add
+  local.tee $0
   local.get $1
+  i32.const 255
+  i32.and
+  i32.const 16843009
+  i32.mul
+  local.tee $1
+  i32.store
+  local.get $0
   local.get $2
-  i32.shl
+  local.get $3
+  i32.sub
+  i32.const -4
+  i32.and
   local.tee $3
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $1
-  i32.const 0
+  i32.add
+  i32.const 28
+  i32.sub
+  local.tee $2
+  local.get $1
+  i32.store offset=24
   local.get $3
-  call $~lib/memory/memory.fill
-  local.get $0
-  i32.eqz
+  i32.const 8
+  i32.le_u
   if
-   i32.const 12
-   i32.const 2
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.set $0
+   return
   end
   local.get $0
-  i32.const 0
-  i32.store
-  local.get $0
-  i32.const 0
+  local.get $1
   i32.store offset=4
   local.get $0
-  i32.const 0
+  local.get $1
   i32.store offset=8
+  local.get $2
   local.get $1
-  local.set $2
+  i32.store offset=16
+  local.get $2
   local.get $1
-  local.get $0
+  i32.store offset=20
+  local.get $3
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $1
+  i32.store offset=16
+  local.get $0
+  local.get $1
+  i32.store offset=20
+  local.get $0
+  local.get $1
+  i32.store offset=24
+  local.get $2
+  local.get $1
+  i32.store
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  local.get $1
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=12
+  local.get $0
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.const 24
+  i32.add
+  local.tee $2
+  i32.add
+  local.set $0
+  local.get $3
+  local.get $2
+  i32.sub
+  local.set $2
+  local.get $1
+  i64.extend_i32_u
+  local.get $1
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $4
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
+   if
+    local.get $0
+    local.get $4
+    i64.store
+    local.get $0
+    local.get $4
+    i64.store offset=8
+    local.get $0
+    local.get $4
+    i64.store offset=16
+    local.get $0
+    local.get $4
+    i64.store offset=24
+    local.get $2
+    i32.const 32
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
+   end
+  end
+ )
+ (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   local.tee $1
+   i32.load offset=4
+   local.tee $2
+   i32.const -268435456
+   i32.and
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.const -268435456
+   i32.and
+   i32.ne
+   if
+    i32.const 0
+    i32.const 1264
+    i32.const 109
+    i32.const 3
+    call $~lib/builtins/abort
+    unreachable
+   end
+   local.get $1
+   local.get $2
+   i32.const 1
+   i32.add
+   i32.store offset=4
+   local.get $1
+   call $~lib/rt/rtrace/onincrement
+   local.get $1
+   i32.load
+   i32.const 1
+   i32.and
+   if
+    i32.const 0
+    i32.const 1264
+    i32.const 112
+    i32.const 14
+    call $~lib/builtins/abort
+    unreachable
+   end
+  end
+  local.get $0
+ )
+ (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $1
+  i32.const 1073741808
+  local.get $2
+  i32.shr_u
+  i32.gt_u
+  if
+   i32.const 1040
+   i32.const 1088
+   i32.const 18
+   i32.const 57
+   call $~lib/builtins/abort
+   unreachable
+  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
+  local.get $2
+  i32.shl
+  local.tee $3
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  i32.const 0
+  local.get $3
+  call $~lib/util/memory/memset
+  local.get $0
+  i32.eqz
+  if
+   call $~lib/rt/tlsf/maybeInitialize
+   i32.const 12
+   i32.const 2
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   call $~lib/rt/pure/__retain
+   local.set $0
+  end
+  local.get $0
+  i32.const 0
+  i32.store
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $1
+  local.tee $2
+  local.get $0
   i32.load
   local.tee $4
   i32.ne
@@ -1516,7 +1505,14 @@
    call $~lib/rt/pure/__retain
    local.set $2
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
   end
   local.get $0
   local.get $2
@@ -1530,106 +1526,132 @@
   local.get $0
  )
  (func $~lib/typedarray/Int8Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 0
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
- (func $~lib/arraybuffer/ArrayBufferView#get:byteOffset (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load
-  i32.sub
- )
  (func $~lib/typedarray/Uint8Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 0
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Uint8ClampedArray#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 0
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Int16Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 1
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Uint16Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 1
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Int32Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 8
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 2
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Uint32Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 9
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 2
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Int64Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 10
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 3
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Uint64Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 11
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 3
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Float32Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 12
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 2
   call $~lib/arraybuffer/ArrayBufferView#constructor
  )
  (func $~lib/typedarray/Float64Array#constructor (param $0 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 13
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.get $0
   i32.const 3
@@ -1650,7 +1672,10 @@
   local.get $0
   call $~lib/typedarray/Int8Array#constructor
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1686,7 +1711,10 @@
   local.get $0
   call $~lib/typedarray/Uint8Array#constructor
   local.tee $2
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $2
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1722,7 +1750,10 @@
   local.get $0
   call $~lib/typedarray/Uint8ClampedArray#constructor
   local.tee $3
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $3
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1758,7 +1789,10 @@
   local.get $0
   call $~lib/typedarray/Int16Array#constructor
   local.tee $4
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $4
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1798,7 +1832,10 @@
   local.get $0
   call $~lib/typedarray/Uint16Array#constructor
   local.tee $5
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $5
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1838,10 +1875,13 @@
   local.get $0
   call $~lib/typedarray/Int32Array#constructor
   local.tee $6
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
+  i32.load offset=4
+  local.get $6
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
    i32.const 57
    i32.const 3
    call $~lib/builtins/abort
@@ -1878,7 +1918,10 @@
   local.get $0
   call $~lib/typedarray/Uint32Array#constructor
   local.tee $7
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $7
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1918,7 +1961,10 @@
   local.get $0
   call $~lib/typedarray/Int64Array#constructor
   local.tee $8
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $8
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1958,7 +2004,10 @@
   local.get $0
   call $~lib/typedarray/Uint64Array#constructor
   local.tee $9
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $9
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -1998,7 +2047,10 @@
   local.get $0
   call $~lib/typedarray/Float32Array#constructor
   local.tee $10
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $10
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -2038,7 +2090,10 @@
   local.get $0
   call $~lib/typedarray/Float64Array#constructor
   local.tee $11
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $11
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -2076,27 +2131,104 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $7
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $8
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $8
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $9
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $9
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $10
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $10
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $11
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $11
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/typedarray/Int32Array#__set (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
@@ -2145,7 +2277,7 @@
   i32.add
   i32.load
  )
- (func $~lib/typedarray/Int32Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
@@ -2198,9 +2330,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 8
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $3
   i32.load
@@ -2253,7 +2388,7 @@
   local.get $2
   f64.store
  )
- (func $~lib/typedarray/Float64Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
@@ -2306,9 +2441,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 13
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $3
   i32.load
@@ -2454,7 +2592,7 @@
   if
    i32.const 0
    i32.const 1152
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -2481,6 +2619,7 @@
   (local $5 i32)
   (local $6 f64)
   (local $7 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $1
   i32.const 31
   i32.add
@@ -2490,11 +2629,13 @@
   i32.shl
   local.tee $2
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $5
   i32.const 0
   local.get $2
-  call $~lib/memory/memory.fill
+  call $~lib/util/memory/memset
   local.get $1
   i32.const 1
   i32.sub
@@ -2856,7 +2997,7 @@
   local.get $2
   i32.store8
  )
- (func $~lib/typedarray/Int8Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -2889,7 +3030,7 @@
    i32.lt_s
    select
   end
-  local.tee $2
+  local.tee $0
   local.get $3
   i32.const 0
   i32.lt_s
@@ -2897,9 +3038,9 @@
    local.get $3
    local.get $4
    i32.add
-   local.tee $0
+   local.tee $2
    i32.const 0
-   local.get $0
+   local.get $2
    i32.const 0
    i32.gt_s
    select
@@ -2911,225 +3052,232 @@
    i32.lt_s
    select
   end
-  local.tee $0
+  local.tee $2
   i32.lt_s
   if
-   local.get $2
+   local.get $0
    local.get $6
    i32.add
    local.get $1
-   local.get $0
    local.get $2
+   local.get $0
    i32.sub
-   call $~lib/memory/memory.fill
+   call $~lib/util/memory/memset
   end
   local.get $5
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
  (func $~lib/rt/__allocArray (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 16
   local.get $2
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $0
   local.get $1
   i32.shl
-  local.tee $1
-  local.set $5
-  local.get $1
+  local.tee $5
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   local.get $3
   if
-   local.get $4
+   local.get $1
    local.get $3
-   local.get $5
-   call $~lib/memory/memory.copy
+   local.get $6
+   call $~lib/util/memory/memmove
   end
-  local.get $4
-  local.tee $3
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $3
+  local.get $1
   i32.store offset=4
   local.get $2
-  local.get $1
+  local.get $5
   i32.store offset=8
   local.get $2
   local.get $0
@@ -3155,13 +3303,6 @@
   i32.add
   i32.load8_s
  )
- (func $~lib/array/Array<i8>#__unchecked_get (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.add
-  i32.load8_s
- )
  (func $std/typedarray/isInt8ArrayEqual (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
@@ -3184,7 +3325,6 @@
      local.get $0
      local.get $2
      call $~lib/typedarray/Int8Array#__get
-     local.set $4
      local.get $2
      local.get $1
      i32.load offset=12
@@ -3197,10 +3337,11 @@
       call $~lib/builtins/abort
       unreachable
      end
-     local.get $1
      local.get $2
-     call $~lib/array/Array<i8>#__unchecked_get
-     local.get $4
+     local.get $1
+     i32.load offset=4
+     i32.add
+     i32.load8_s
      i32.ne
      br_if $folding-inner0
      local.get $2
@@ -3215,7 +3356,7 @@
   end
   i32.const 0
  )
- (func $~lib/typedarray/Int8Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
@@ -3266,9 +3407,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $3
   i32.load
@@ -3293,95 +3437,83 @@
   local.get $2
   call $~lib/rt/pure/__retain
  )
- (func $~lib/typedarray/Int32Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  local.get $1
-  local.set $4
   local.get $0
   call $~lib/rt/pure/__retain
-  local.tee $5
+  local.tee $4
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $5
+  local.get $4
   i32.load offset=8
   i32.const 2
   i32.shr_u
-  local.set $1
+  local.set $0
   local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $1
+   local.get $0
    local.get $2
    i32.add
-   local.tee $0
+   local.tee $2
    i32.const 0
-   local.get $0
+   local.get $2
    i32.const 0
    i32.gt_s
    select
   else
    local.get $2
-   local.get $1
+   local.get $0
    local.get $2
-   local.get $1
+   local.get $0
    i32.lt_s
    select
   end
-  local.set $0
+  local.set $2
   local.get $3
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $1
+   local.get $0
    local.get $3
    i32.add
-   local.tee $1
+   local.tee $0
    i32.const 0
-   local.get $1
+   local.get $0
    i32.const 0
    i32.gt_s
    select
   else
    local.get $3
-   local.get $1
+   local.get $0
    local.get $3
-   local.get $1
+   local.get $0
    i32.lt_s
    select
   end
-  local.set $1
+  local.set $0
   loop $for-loop|0
+   local.get $2
    local.get $0
-   local.get $1
    i32.lt_s
    if
-    local.get $6
-    local.get $0
+    local.get $5
+    local.get $2
     i32.const 2
     i32.shl
     i32.add
-    local.get $4
+    local.get $1
     i32.store
-    local.get $0
+    local.get $2
     i32.const 1
     i32.add
-    local.set $0
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $5
- )
- (func $~lib/array/Array<i32>#__unchecked_get (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load
+  local.get $4
  )
  (func $~lib/array/Array<i32>#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -3397,8 +3529,12 @@
    unreachable
   end
   local.get $0
+  i32.load offset=4
   local.get $1
-  call $~lib/array/Array<i32>#__unchecked_get
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load
  )
  (func $std/typedarray/isInt32ArrayEqual (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -3442,7 +3578,7 @@
   end
   i32.const 0
  )
- (func $~lib/typedarray/Int32Array#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   local.get $0
@@ -3501,9 +3637,9 @@
   i32.const 0
   i32.gt_s
   select
-  local.tee $2
-  call $~lib/typedarray/Int32Array#constructor
   local.tee $3
+  call $~lib/typedarray/Int32Array#constructor
+  local.tee $2
   call $~lib/rt/pure/__retain
   local.tee $4
   i32.load offset=4
@@ -3513,15 +3649,22 @@
   i32.const 2
   i32.shl
   i32.add
-  local.get $2
+  local.get $3
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
-  local.get $3
-  call $~lib/rt/pure/__release
+  call $~lib/util/memory/memmove
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
  )
- (func $~lib/typedarray/Int32Array#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -3626,7 +3769,7 @@
   select
   i32.const 2
   i32.shl
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $5
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
@@ -3718,42 +3861,198 @@
   local.get $2
   i32.store16
  )
- (func $~lib/typedarray/Uint16Array#__set (param $0 i32) (param $1 i32) (param $2 i32)
-  local.get $1
-  local.get $0
-  i32.load offset=8
-  i32.const 1
-  i32.shr_u
-  i32.ge_u
-  if
-   i32.const 1376
-   i32.const 1440
-   i32.const 547
-   i32.const 64
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 1
-  i32.shl
-  i32.add
-  local.get $2
-  i32.store16
- )
- (func $~lib/typedarray/Int32Array#reduce<i32> (param $0 i32) (param $1 i32) (result i32)
+ (func $std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>
+  (local $0 i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $4
-  local.get $0
-  i32.load offset=8
-  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int16Array#constructor
+  local.tee $2
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $4
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $0
+  loop $for-loop|0
+   local.get $1
+   local.get $0
+   i32.lt_s
+   if
+    local.get $4
+    local.get $1
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    local.set $5
+    i32.const 4
+    global.set $~argumentsLength
+    local.get $3
+    local.get $5
+    i32.add
+    local.set $3
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
+   end
+  end
+  local.get $3
+  i32.const 65535
+  i32.and
+  i32.const 6
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 323
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/typedarray/Uint16Array#__set (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 547
+   i32.const 64
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 1
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store16
+ )
+ (func $std/typedarray/testReduce<~lib/typedarray/Uint16Array,u16>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  i32.const 3
+  call $~lib/typedarray/Uint16Array#constructor
+  local.tee $2
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $4
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $0
+  loop $for-loop|0
+   local.get $1
+   local.get $0
+   i32.lt_s
+   if
+    local.get $4
+    local.get $1
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.set $5
+    i32.const 4
+    global.set $~argumentsLength
+    local.get $3
+    local.get $5
+    i32.add
+    local.set $3
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
+   end
+  end
+  local.get $3
+  i32.const 65535
+  i32.and
+  i32.const 6
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 323
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Int32Array,i32,i32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $4
+  local.get $0
+  i32.load offset=8
+  i32.const 2
   i32.shr_u
   local.set $5
   loop $for-loop|0
@@ -3839,7 +4138,7 @@
   local.get $1
   i64.add
  )
- (func $~lib/typedarray/Int64Array#reduce<i64> (param $0 i32) (param $1 i32) (result i64)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Int64Array,i64,i64> (param $0 i32) (param $1 i32) (result i64)
   (local $2 i32)
   (local $3 i64)
   (local $4 i32)
@@ -3936,109 +4235,248 @@
   local.get $1
   f32.add
  )
- (func $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 f64) (param $2 i32) (param $3 i32) (result f64)
-  local.get $0
-  local.get $1
-  f64.add
- )
- (func $~lib/typedarray/Uint8Array#reduceRight<u8> (param $0 i32) (param $1 i32) (result i32)
+ (func $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>
+  (local $0 i32)
+  (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
+  (local $3 f32)
   (local $4 i32)
-  (local $5 i32)
+  (local $5 f32)
+  i32.const 3
+  call $~lib/typedarray/Float32Array#constructor
+  local.tee $2
+  local.tee $0
+  i32.const 0
+  f32.const 1
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 1
+  f32.const 2
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 2
+  f32.const 3
+  call $~lib/typedarray/Float32Array#__set
   local.get $0
   i32.load offset=4
   local.set $4
   local.get $0
   i32.load offset=8
-  i32.const 1
-  i32.sub
-  local.set $2
+  i32.const 2
+  i32.shr_u
+  local.set $0
   loop $for-loop|0
-   local.get $2
-   i32.const 0
-   i32.ge_s
+   local.get $1
+   local.get $0
+   i32.lt_s
    if
-    local.get $2
     local.get $4
+    local.get $1
+    i32.const 2
+    i32.shl
     i32.add
-    i32.load8_u
+    f32.load
     local.set $5
     i32.const 4
     global.set $~argumentsLength
     local.get $3
     local.get $5
-    local.get $2
-    local.get $0
-    local.get $1
-    call_indirect (type $i32_i32_i32_i32_=>_i32)
+    f32.add
     local.set $3
-    local.get $2
+    local.get $1
     i32.const 1
-    i32.sub
-    local.set $2
+    i32.add
+    local.set $1
     br $for-loop|0
    end
   end
   local.get $3
- )
- (func $~lib/typedarray/Int32Array#reduceRight<i32> (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $4
-  local.get $0
-  i32.load offset=8
-  i32.const 2
-  i32.shr_u
-  i32.const 1
-  i32.sub
-  local.set $2
-  loop $for-loop|0
-   local.get $2
+  f32.const 6
+  f32.ne
+  if
    i32.const 0
-   i32.ge_s
+   i32.const 1312
+   i32.const 323
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 f64) (param $2 i32) (param $3 i32) (result f64)
+  local.get $0
+  local.get $1
+  f64.add
+ )
+ (func $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 f64)
+  (local $4 i32)
+  (local $5 f64)
+  i32.const 3
+  call $~lib/typedarray/Float64Array#constructor
+  local.tee $2
+  local.tee $0
+  i32.const 0
+  f64.const 1
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 1
+  f64.const 2
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 2
+  f64.const 3
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $4
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $0
+  loop $for-loop|0
+   local.get $1
+   local.get $0
+   i32.lt_s
    if
     local.get $4
-    local.get $2
-    i32.const 2
+    local.get $1
+    i32.const 3
     i32.shl
     i32.add
-    i32.load
+    f64.load
     local.set $5
     i32.const 4
     global.set $~argumentsLength
     local.get $3
     local.get $5
-    local.get $2
-    local.get $0
-    local.get $1
-    call_indirect (type $i32_i32_i32_i32_=>_i32)
+    f64.add
     local.set $3
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
+   end
+  end
+  local.get $3
+  f64.const 6
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 323
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $std/typedarray/testReduceRight<~lib/typedarray/Int8Array,i8>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  i32.const 3
+  call $~lib/typedarray/Int8Array#constructor
+  local.tee $1
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.sub
+  local.set $0
+  loop $for-loop|0
+   local.get $0
+   i32.const 0
+   i32.ge_s
+   if
+    local.get $0
+    local.get $3
+    i32.add
+    i32.load8_s
+    local.set $4
+    i32.const 4
+    global.set $~argumentsLength
     local.get $2
+    local.get $4
+    i32.add
+    local.set $2
+    local.get $0
     i32.const 1
     i32.sub
-    local.set $2
+    local.set $0
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $2
+  i32.const 255
+  i32.and
+  i32.const 6
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 344
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int64Array#reduceRight<i64> (param $0 i32) (param $1 i32) (result i64)
+ (func $~lib/typedarray/Uint8Array#reduceRight<u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i64)
+  (local $3 i32)
   (local $4 i32)
-  (local $5 i64)
+  (local $5 i32)
   local.get $0
   i32.load offset=4
   local.set $4
   local.get $0
   i32.load offset=8
-  i32.const 3
-  i32.shr_u
   i32.const 1
   i32.sub
   local.set $2
@@ -4047,12 +4485,10 @@
    i32.const 0
    i32.ge_s
    if
-    local.get $4
     local.get $2
-    i32.const 3
-    i32.shl
+    local.get $4
     i32.add
-    i64.load
+    i32.load8_u
     local.set $5
     i32.const 4
     global.set $~argumentsLength
@@ -4061,7 +4497,7 @@
     local.get $2
     local.get $0
     local.get $1
-    call_indirect (type $i64_i64_i32_i32_=>_i64)
+    call_indirect (type $i32_i32_i32_i32_=>_i32)
     local.set $3
     local.get $2
     i32.const 1
@@ -4072,305 +4508,414 @@
   end
   local.get $3
  )
- (func $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
+ (func $std/typedarray/testReduceRight<~lib/typedarray/Int16Array,i16>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  i32.const 3
+  call $~lib/typedarray/Int16Array#constructor
+  local.tee $1
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
-  i32.mul
- )
- (func $~lib/typedarray/Uint8Array#__get (param $0 i32) (param $1 i32) (result i32)
-  local.get $1
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
-  i32.load offset=8
-  i32.ge_u
-  if
-   i32.const 1376
-   i32.const 1440
-   i32.const 152
-   i32.const 45
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
   i32.load offset=4
-  i32.add
-  i32.load8_u
- )
- (func $~lib/typedarray/Int16Array#__get (param $0 i32) (param $1 i32) (result i32)
-  local.get $1
+  local.set $3
   local.get $0
   i32.load offset=8
   i32.const 1
   i32.shr_u
-  i32.ge_u
+  i32.const 1
+  i32.sub
+  local.set $0
+  loop $for-loop|0
+   local.get $0
+   i32.const 0
+   i32.ge_s
+   if
+    local.get $3
+    local.get $0
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    local.set $4
+    i32.const 4
+    global.set $~argumentsLength
+    local.get $2
+    local.get $4
+    i32.add
+    local.set $2
+    local.get $0
+    i32.const 1
+    i32.sub
+    local.set $0
+    br $for-loop|0
+   end
+  end
+  local.get $2
+  i32.const 65535
+  i32.and
+  i32.const 6
+  i32.ne
   if
-   i32.const 1376
-   i32.const 1440
-   i32.const 408
-   i32.const 64
+   i32.const 0
+   i32.const 1312
+   i32.const 344
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  i32.load offset=4
   local.get $1
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint16Array#__get (param $0 i32) (param $1 i32) (result i32)
-  local.get $1
+ (func $std/typedarray/testReduceRight<~lib/typedarray/Uint16Array,u16>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  i32.const 3
+  call $~lib/typedarray/Uint16Array#constructor
+  local.tee $1
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint16Array#__set
   local.get $0
-  i32.load offset=8
   i32.const 1
-  i32.shr_u
-  i32.ge_u
-  if
-   i32.const 1376
-   i32.const 1440
-   i32.const 536
-   i32.const 64
-   call $~lib/builtins/abort
-   unreachable
-  end
+  i32.const 2
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint16Array#__set
   local.get $0
   i32.load offset=4
-  local.get $1
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_u
- )
- (func $~lib/typedarray/Uint32Array#__get (param $0 i32) (param $1 i32) (result i32)
-  local.get $1
+  local.set $3
   local.get $0
   i32.load offset=8
-  i32.const 2
+  i32.const 1
   i32.shr_u
-  i32.ge_u
+  i32.const 1
+  i32.sub
+  local.set $0
+  loop $for-loop|0
+   local.get $0
+   i32.const 0
+   i32.ge_s
+   if
+    local.get $3
+    local.get $0
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.set $4
+    i32.const 4
+    global.set $~argumentsLength
+    local.get $2
+    local.get $4
+    i32.add
+    local.set $2
+    local.get $0
+    i32.const 1
+    i32.sub
+    local.set $0
+    br $for-loop|0
+   end
+  end
+  local.get $2
+  i32.const 65535
+  i32.and
+  i32.const 6
+  i32.ne
   if
-   i32.const 1376
-   i32.const 1440
-   i32.const 792
-   i32.const 64
+   i32.const 0
+   i32.const 1312
+   i32.const 344
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  i32.load offset=4
   local.get $1
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i64)
-  local.get $0
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int32Array,i32,i32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
   local.get $0
-  i64.mul
- )
- (func $~lib/typedarray/Int64Array#__get (param $0 i32) (param $1 i32) (result i64)
-  local.get $1
+  i32.load offset=4
+  local.set $4
   local.get $0
   i32.load offset=8
-  i32.const 3
+  i32.const 2
   i32.shr_u
-  i32.ge_u
-  if
-   i32.const 1376
-   i32.const 1440
-   i32.const 920
-   i32.const 64
-   call $~lib/builtins/abort
-   unreachable
+  i32.const 1
+  i32.sub
+  local.set $2
+  loop $for-loop|0
+   local.get $2
+   i32.const 0
+   i32.ge_s
+   if
+    local.get $4
+    local.get $2
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.set $5
+    i32.const 4
+    global.set $~argumentsLength
+    local.get $3
+    local.get $5
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_i32_=>_i32)
+    local.set $3
+    local.get $2
+    i32.const 1
+    i32.sub
+    local.set $2
+    br $for-loop|0
+   end
   end
+  local.get $3
+ )
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int64Array,i64,i64> (param $0 i32) (param $1 i32) (result i64)
+  (local $2 i32)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i64)
   local.get $0
   i32.load offset=4
-  local.get $1
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
- )
- (func $~lib/typedarray/Uint64Array#__get (param $0 i32) (param $1 i32) (result i64)
-  local.get $1
+  local.set $4
   local.get $0
   i32.load offset=8
   i32.const 3
   i32.shr_u
-  i32.ge_u
-  if
-   i32.const 1376
-   i32.const 1440
-   i32.const 1048
-   i32.const 64
-   call $~lib/builtins/abort
-   unreachable
+  i32.const 1
+  i32.sub
+  local.set $2
+  loop $for-loop|0
+   local.get $2
+   i32.const 0
+   i32.ge_s
+   if
+    local.get $4
+    local.get $2
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.set $5
+    i32.const 4
+    global.set $~argumentsLength
+    local.get $3
+    local.get $5
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i64_i64_i32_i32_=>_i64)
+    local.set $3
+    local.get $2
+    i32.const 1
+    i32.sub
+    local.set $2
+    br $for-loop|0
+   end
   end
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
+  local.get $3
  )
- (func $std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result f32)
+ (func $std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 f32)
+  (local $3 i32)
+  (local $4 f32)
+  i32.const 3
+  call $~lib/typedarray/Float32Array#constructor
+  local.tee $1
+  local.tee $0
+  i32.const 0
+  f32.const 1
+  call $~lib/typedarray/Float32Array#__set
   local.get $0
+  i32.const 1
+  f32.const 2
+  call $~lib/typedarray/Float32Array#__set
   local.get $0
-  f32.mul
- )
- (func $~lib/typedarray/Float32Array#__get (param $0 i32) (param $1 i32) (result f32)
-  local.get $1
+  i32.const 2
+  f32.const 3
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $3
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
-  i32.ge_u
-  if
-   i32.const 1376
-   i32.const 1440
-   i32.const 1176
-   i32.const 64
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 2
-  i32.shl
-  i32.add
-  f32.load
- )
- (func $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result f64)
-  local.get $0
-  local.get $0
-  f64.mul
- )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i32.const 24
-  i32.shl
-  i32.const 24
-  i32.shr_s
-  i32.const 2
-  i32.gt_s
- )
- (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
+  i32.const 1
+  i32.sub
+  local.set $0
+  loop $for-loop|0
+   local.get $0
+   i32.const 0
+   i32.ge_s
+   if
+    local.get $3
+    local.get $0
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    local.set $4
+    i32.const 4
+    global.set $~argumentsLength
+    local.get $2
+    local.get $4
+    f32.add
+    local.set $2
+    local.get $0
+    i32.const 1
+    i32.sub
+    local.set $0
+    br $for-loop|0
+   end
+  end
   local.get $2
-  call $~lib/rt/tlsf/prepareSize
-  local.tee $3
-  local.get $1
-  i32.load
-  local.tee $5
-  i32.const -4
-  i32.and
-  i32.le_u
+  f32.const 6
+  f32.ne
   if
-   local.get $0
-   local.get $1
-   local.get $3
-   call $~lib/rt/tlsf/prepareBlock
-   local.get $1
-   local.get $2
-   i32.store offset=12
-   local.get $1
-   return
+   i32.const 0
+   i32.const 1312
+   i32.const 344
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
   end
   local.get $1
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.load
-  i32.const -4
-  i32.and
-  i32.add
-  local.tee $6
-  i32.load
-  local.tee $4
-  i32.const 1
-  i32.and
+  i32.const 8332
+  i32.gt_u
   if
-   local.get $5
-   i32.const -4
-   i32.and
+   local.get $1
    i32.const 16
-   i32.add
-   local.get $4
-   i32.const -4
-   i32.and
-   i32.add
-   local.tee $4
-   local.get $3
-   i32.ge_u
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 f64)
+  (local $3 i32)
+  (local $4 f64)
+  i32.const 3
+  call $~lib/typedarray/Float64Array#constructor
+  local.tee $1
+  local.tee $0
+  i32.const 0
+  f64.const 1
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 1
+  f64.const 2
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 2
+  f64.const 3
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  i32.const 1
+  i32.sub
+  local.set $0
+  loop $for-loop|0
+   local.get $0
+   i32.const 0
+   i32.ge_s
    if
+    local.get $3
     local.get $0
-    local.get $6
-    call $~lib/rt/tlsf/removeBlock
-    local.get $1
-    local.get $5
     i32.const 3
-    i32.and
-    local.get $4
-    i32.or
-    i32.store
-    local.get $1
+    i32.shl
+    i32.add
+    f64.load
+    local.set $4
+    i32.const 4
+    global.set $~argumentsLength
     local.get $2
-    i32.store offset=12
+    local.get $4
+    f64.add
+    local.set $2
     local.get $0
-    local.get $1
-    local.get $3
-    call $~lib/rt/tlsf/prepareBlock
-    local.get $1
-    return
+    i32.const 1
+    i32.sub
+    local.set $0
+    br $for-loop|0
    end
   end
-  local.get $0
-  local.get $2
-  local.get $1
-  i32.load offset=8
-  call $~lib/rt/tlsf/allocateBlock
-  local.tee $3
-  local.get $1
-  i32.load offset=4
-  i32.store offset=4
-  local.get $3
-  i32.const 16
-  i32.add
-  local.get $1
-  i32.const 16
-  i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  f64.const 6
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 344
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
   local.get $1
   i32.const 8332
-  i32.ge_u
+  i32.gt_u
   if
    local.get $1
-   local.get $3
-   call $~lib/rt/rtrace/onrealloc
-   local.get $0
-   local.get $1
-   call $~lib/rt/tlsf/freeBlock
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $3
  )
- (func $~lib/rt/tlsf/__realloc (param $0 i32) (param $1 i32) (result i32)
-  call $~lib/rt/tlsf/maybeInitialize
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  call $~lib/rt/tlsf/checkUsedBlock
-  local.get $1
-  call $~lib/rt/tlsf/reallocateBlock
-  i32.const 16
-  i32.add
+  local.get $0
+  i32.mul
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -4378,8 +4923,7 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Int8Array#constructor
   local.tee $1
   i32.const 0
@@ -4394,107 +4938,72 @@
   i32.const 3
   call $~lib/typedarray/Int8Array#__set
   local.get $1
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Int8Array#__set
-  local.get $1
-  i32.const 5
-  i32.const 5
-  call $~lib/typedarray/Int8Array#__set
+  i32.load offset=4
+  local.set $6
   local.get $1
   i32.load offset=8
-  local.set $5
+  local.set $3
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
-  local.set $4
-  local.get $5
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $1
-  i32.load offset=4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $4
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $5
    i32.lt_s
    if
-    local.get $0
-    local.get $3
+    local.get $2
+    local.get $6
     i32.add
     i32.load8_s
-    local.set $7
+    local.set $5
     i32.const 3
     global.set $~argumentsLength
-    local.get $7
-    local.get $3
-    local.get $1
-    call $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0
-    if
-     local.get $2
-     local.get $6
-     i32.add
-     local.get $7
-     i32.store8
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-    end
-    local.get $3
+    local.get $2
+    local.get $4
+    i32.add
+    local.get $5
+    local.get $5
+    i32.mul
+    i32.store8
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
+    local.set $2
     br $for-loop|0
    end
   end
+  local.get $0
   local.get $4
-  local.get $6
-  local.get $2
-  call $~lib/rt/tlsf/__realloc
-  local.tee $0
   call $~lib/rt/pure/__retain
   i32.store
+  local.get $0
   local.get $4
-  local.get $2
+  i32.store offset=4
+  local.get $0
+  local.get $3
   i32.store offset=8
-  local.get $4
   local.get $0
-  i32.store offset=4
-  local.get $4
   call $~lib/rt/pure/__retain
   local.tee $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=8
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
   i32.const 0
   call $~lib/typedarray/Int8Array#__get
-  i32.const 3
+  i32.const 1
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4507,7 +5016,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4515,29 +5024,55 @@
   local.get $0
   i32.const 2
   call $~lib/typedarray/Int8Array#__get
-  i32.const 5
+  i32.const 9
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint8Array#__get (param $0 i32) (param $1 i32) (result i32)
+  local.get $1
   local.get $0
-  i32.const 255
-  i32.and
-  i32.const 2
-  i32.gt_u
+  i32.load offset=8
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 152
+   i32.const 45
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $0
+  i32.load offset=4
+  i32.add
+  i32.load8_u
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -4545,8 +5080,7 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Uint8Array#constructor
   local.tee $1
   i32.const 0
@@ -4561,107 +5095,72 @@
   i32.const 3
   call $~lib/typedarray/Uint8Array#__set
   local.get $1
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Uint8Array#__set
-  local.get $1
-  i32.const 5
-  i32.const 5
-  call $~lib/typedarray/Uint8Array#__set
+  i32.load offset=4
+  local.set $6
   local.get $1
   i32.load offset=8
-  local.set $5
+  local.set $3
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
-  local.set $4
-  local.get $5
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $1
-  i32.load offset=4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $4
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $5
    i32.lt_s
    if
-    local.get $0
-    local.get $3
+    local.get $2
+    local.get $6
     i32.add
     i32.load8_u
-    local.set $7
+    local.set $5
     i32.const 3
     global.set $~argumentsLength
-    local.get $7
-    local.get $3
-    local.get $1
-    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0
-    if
-     local.get $2
-     local.get $6
-     i32.add
-     local.get $7
-     i32.store8
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-    end
-    local.get $3
+    local.get $2
+    local.get $4
+    i32.add
+    local.get $5
+    local.get $5
+    i32.mul
+    i32.store8
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
+    local.set $2
     br $for-loop|0
    end
   end
+  local.get $0
   local.get $4
-  local.get $6
-  local.get $2
-  call $~lib/rt/tlsf/__realloc
-  local.tee $0
   call $~lib/rt/pure/__retain
   i32.store
+  local.get $0
   local.get $4
-  local.get $2
+  i32.store offset=4
+  local.get $0
+  local.get $3
   i32.store offset=8
-  local.get $4
   local.get $0
-  i32.store offset=4
-  local.get $4
   call $~lib/rt/pure/__retain
   local.tee $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=8
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
   i32.const 0
   call $~lib/typedarray/Uint8Array#__get
-  i32.const 3
+  i32.const 1
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4674,7 +5173,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4682,22 +5181,36 @@
   local.get $0
   i32.const 2
   call $~lib/typedarray/Uint8Array#__get
-  i32.const 5
+  i32.const 9
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
@@ -4705,8 +5218,7 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Uint8ClampedArray#constructor
   local.tee $1
   i32.const 0
@@ -4721,107 +5233,72 @@
   i32.const 3
   call $~lib/typedarray/Uint8ClampedArray#__set
   local.get $1
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Uint8ClampedArray#__set
-  local.get $1
-  i32.const 5
-  i32.const 5
-  call $~lib/typedarray/Uint8ClampedArray#__set
+  i32.load offset=4
+  local.set $6
   local.get $1
   i32.load offset=8
-  local.set $5
+  local.set $3
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
-  local.set $4
-  local.get $5
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $1
-  i32.load offset=4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $4
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $5
    i32.lt_s
    if
-    local.get $0
-    local.get $3
+    local.get $2
+    local.get $6
     i32.add
     i32.load8_u
-    local.set $7
+    local.set $5
     i32.const 3
     global.set $~argumentsLength
-    local.get $7
-    local.get $3
-    local.get $1
-    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0
-    if
-     local.get $2
-     local.get $6
-     i32.add
-     local.get $7
-     i32.store8
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-    end
-    local.get $3
+    local.get $2
+    local.get $4
+    i32.add
+    local.get $5
+    local.get $5
+    i32.mul
+    i32.store8
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
+    local.set $2
     br $for-loop|0
    end
   end
+  local.get $0
   local.get $4
-  local.get $6
-  local.get $2
-  call $~lib/rt/tlsf/__realloc
-  local.tee $0
   call $~lib/rt/pure/__retain
   i32.store
+  local.get $0
   local.get $4
-  local.get $2
+  i32.store offset=4
+  local.get $0
+  local.get $3
   i32.store offset=8
-  local.get $4
   local.get $0
-  i32.store offset=4
-  local.get $4
   call $~lib/rt/pure/__retain
   local.tee $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
-  i32.load offset=8
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $0
   i32.const 0
   call $~lib/typedarray/Uint8ClampedArray#__get
-  i32.const 3
+  i32.const 1
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4834,7 +5311,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -4842,31 +5319,36 @@
   local.get $0
   i32.const 2
   call $~lib/typedarray/Uint8ClampedArray#__get
-  i32.const 5
+  i32.const 9
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
- )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  i32.const 16
-  i32.shl
-  i32.const 16
-  i32.shr_s
-  i32.const 2
-  i32.gt_s
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int16Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Int16Array,i16> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -4878,81 +5360,96 @@
   i32.load offset=8
   i32.const 1
   i32.shr_u
-  local.set $1
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 1
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $7
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $1
    i32.lt_s
    if
-    local.get $7
-    local.get $3
+    local.get $5
+    local.get $2
     i32.const 1
     i32.shl
+    local.tee $7
     i32.add
     i32.load16_s
-    local.set $6
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $6
-    local.get $3
-    local.get $0
-    call $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0
-    if
-     local.get $5
-     local.get $4
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store16
-     local.get $4
-     i32.const 1
-     i32.add
-     local.set $4
-    end
-    local.get $3
+    local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    i32.mul
+    i32.store16
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $4
-  i32.const 1
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>
+ (func $~lib/typedarray/Int16Array#__get (param $0 i32) (param $1 i32) (result i32)
+  local.get $1
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 408
+   i32.const 64
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+ )
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Int16Array#constructor
   local.tee $0
   i32.const 0
@@ -4967,48 +5464,16 @@
   i32.const 3
   call $~lib/typedarray/Int16Array#__set
   local.get $0
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Int16Array#__set
-  local.get $0
-  i32.const 5
-  i32.const 5
-  call $~lib/typedarray/Int16Array#__set
-  local.get $0
-  call $~lib/typedarray/Int16Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Int16Array,i16>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=8
-  i32.const 1
-  i32.shr_u
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
   i32.const 0
   call $~lib/typedarray/Int16Array#__get
-  i32.const 3
+  i32.const 1
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5021,7 +5486,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5029,29 +5494,36 @@
   local.get $1
   i32.const 2
   call $~lib/typedarray/Int16Array#__get
-  i32.const 5
+  i32.const 9
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
- )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i32.const 65535
-  i32.and
-  i32.const 2
+  i32.const 8332
   i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint16Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint16Array,u16> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -5063,81 +5535,96 @@
   i32.load offset=8
   i32.const 1
   i32.shr_u
-  local.set $1
-  i32.const 12
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $1
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 1
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $7
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $1
    i32.lt_s
    if
-    local.get $7
-    local.get $3
+    local.get $5
+    local.get $2
     i32.const 1
     i32.shl
+    local.tee $7
     i32.add
     i32.load16_u
-    local.set $6
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $6
-    local.get $3
-    local.get $0
-    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0
-    if
-     local.get $5
-     local.get $4
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store16
-     local.get $4
-     i32.const 1
-     i32.add
-     local.set $4
-    end
-    local.get $3
+    local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    i32.mul
+    i32.store16
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $4
-  i32.const 1
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>
+ (func $~lib/typedarray/Uint16Array#__get (param $0 i32) (param $1 i32) (result i32)
+  local.get $1
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 536
+   i32.const 64
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_u
+ )
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Uint16Array#constructor
   local.tee $0
   i32.const 0
@@ -5152,48 +5639,16 @@
   i32.const 3
   call $~lib/typedarray/Uint16Array#__set
   local.get $0
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Uint16Array#__set
-  local.get $0
-  i32.const 5
-  i32.const 5
-  call $~lib/typedarray/Uint16Array#__set
-  local.get $0
-  call $~lib/typedarray/Uint16Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint16Array,u16>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=8
-  i32.const 1
-  i32.shr_u
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
   i32.const 0
   call $~lib/typedarray/Uint16Array#__get
-  i32.const 3
+  i32.const 1
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5206,7 +5661,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5214,111 +5669,114 @@
   local.get $1
   i32.const 2
   call $~lib/typedarray/Uint16Array#__get
-  i32.const 5
+  i32.const 9
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
- )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i32.const 2
-  i32.gt_s
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int32Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Int32Array,i32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
+  (local $7 i32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
-  local.set $4
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 8
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 2
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $6
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
-   local.get $1
-   local.get $4
+   local.get $2
+   local.get $3
    i32.lt_s
    if
-    local.get $6
-    local.get $1
+    local.get $5
+    local.get $2
     i32.const 2
     i32.shl
+    local.tee $7
     i32.add
     i32.load
-    local.set $0
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $0
-    i32.const 2
-    i32.gt_s
-    if
-     local.get $5
-     local.get $3
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $0
-     i32.store
-     local.get $3
-     i32.const 1
-     i32.add
-     local.set $3
-    end
     local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    i32.mul
+    i32.store
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $3
-  i32.const 2
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Int32Array#constructor
   local.tee $0
   i32.const 0
@@ -5333,48 +5791,16 @@
   i32.const 3
   call $~lib/typedarray/Int32Array#__set
   local.get $0
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Int32Array#__set
-  local.get $0
-  i32.const 5
-  i32.const 5
-  call $~lib/typedarray/Int32Array#__set
-  local.get $0
-  call $~lib/typedarray/Int32Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Int32Array,i32>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.const 0
+  call $~lib/typedarray/Int32Array#__get
+  i32.const 1
+  i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=8
-  i32.const 2
-  i32.shr_u
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.const 0
-  call $~lib/typedarray/Int32Array#__get
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5387,7 +5813,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5395,111 +5821,137 @@
   local.get $1
   i32.const 2
   call $~lib/typedarray/Int32Array#__get
-  i32.const 5
+  i32.const 9
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
- )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i32.const 2
+  i32.const 8332
   i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint32Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint32Array,u32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
+  (local $7 i32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
-  local.set $4
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 9
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 2
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $6
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
-   local.get $1
-   local.get $4
+   local.get $2
+   local.get $3
    i32.lt_s
    if
-    local.get $6
-    local.get $1
+    local.get $5
+    local.get $2
     i32.const 2
     i32.shl
+    local.tee $7
     i32.add
     i32.load
-    local.set $0
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $0
-    i32.const 2
-    i32.gt_u
-    if
-     local.get $5
-     local.get $3
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $0
-     i32.store
-     local.get $3
-     i32.const 1
-     i32.add
-     local.set $3
-    end
     local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    i32.mul
+    i32.store
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $3
-  i32.const 2
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>
+ (func $~lib/typedarray/Uint32Array#__get (param $0 i32) (param $1 i32) (result i32)
+  local.get $1
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 792
+   i32.const 64
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load
+ )
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Uint32Array#constructor
   local.tee $0
   i32.const 0
@@ -5514,48 +5966,16 @@
   i32.const 3
   call $~lib/typedarray/Uint32Array#__set
   local.get $0
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Uint32Array#__set
-  local.get $0
-  i32.const 5
-  i32.const 5
-  call $~lib/typedarray/Uint32Array#__set
-  local.get $0
-  call $~lib/typedarray/Uint32Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint32Array,u32>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=8
-  i32.const 2
-  i32.shr_u
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
   i32.const 0
   call $~lib/typedarray/Uint32Array#__get
-  i32.const 3
+  i32.const 1
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5568,7 +5988,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5576,111 +5996,142 @@
   local.get $1
   i32.const 2
   call $~lib/typedarray/Uint32Array#__get
-  i32.const 5
+  i32.const 9
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i64)
   local.get $0
-  i64.const 2
-  i64.gt_s
+  local.get $0
+  i64.mul
  )
- (func $~lib/typedarray/Int64Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Int64Array,i64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
+  (local $4 i64)
   (local $5 i32)
-  (local $6 i64)
+  (local $6 i32)
+  (local $7 i32)
   local.get $0
   i32.load offset=8
   i32.const 3
   i32.shr_u
-  local.set $4
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 10
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 3
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
-   local.get $1
-   local.get $4
+   local.get $2
+   local.get $3
    i32.lt_s
    if
-    local.get $0
-    local.get $1
+    local.get $5
+    local.get $2
     i32.const 3
     i32.shl
+    local.tee $7
     i32.add
     i64.load
-    local.set $6
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $6
-    i64.const 2
-    i64.gt_s
-    if
-     local.get $5
-     local.get $3
-     i32.const 3
-     i32.shl
-     i32.add
-     local.get $6
-     i64.store
-     local.get $3
-     i32.const 1
-     i32.add
-     local.set $3
-    end
     local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    i64.mul
+    i64.store
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $3
-  i32.const 3
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>
+ (func $~lib/typedarray/Int64Array#__get (param $0 i32) (param $1 i32) (result i64)
+  local.get $1
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 920
+   i32.const 64
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+ )
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Int64Array#constructor
   local.tee $0
   i32.const 0
@@ -5695,48 +6146,16 @@
   i64.const 3
   call $~lib/typedarray/Int64Array#__set
   local.get $0
-  i32.const 3
-  i64.const 4
-  call $~lib/typedarray/Int64Array#__set
-  local.get $0
-  i32.const 5
-  i64.const 5
-  call $~lib/typedarray/Int64Array#__set
-  local.get $0
-  call $~lib/typedarray/Int64Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Int64Array,i64>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=8
-  i32.const 3
-  i32.shr_u
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
   i32.const 0
   call $~lib/typedarray/Int64Array#__get
-  i64.const 3
+  i64.const 1
   i64.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5749,7 +6168,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -5757,111 +6176,137 @@
   local.get $1
   i32.const 2
   call $~lib/typedarray/Int64Array#__get
-  i64.const 5
+  i64.const 9
   i64.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
- )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i64.const 2
-  i64.gt_u
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint64Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint64Array,u64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
+  (local $4 i64)
   (local $5 i32)
-  (local $6 i64)
+  (local $6 i32)
+  (local $7 i32)
   local.get $0
   i32.load offset=8
   i32.const 3
   i32.shr_u
-  local.set $4
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 11
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 3
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
-   local.get $1
-   local.get $4
+   local.get $2
+   local.get $3
    i32.lt_s
    if
-    local.get $0
-    local.get $1
+    local.get $5
+    local.get $2
     i32.const 3
     i32.shl
+    local.tee $7
     i32.add
     i64.load
-    local.set $6
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $6
-    i64.const 2
-    i64.gt_u
-    if
-     local.get $5
-     local.get $3
-     i32.const 3
-     i32.shl
-     i32.add
-     local.get $6
-     i64.store
-     local.get $3
-     i32.const 1
-     i32.add
-     local.set $3
-    end
     local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    i64.mul
+    i64.store
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $3
-  i32.const 3
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>
+ (func $~lib/typedarray/Uint64Array#__get (param $0 i32) (param $1 i32) (result i64)
+  local.get $1
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 1048
+   i32.const 64
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+ )
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Uint64Array#constructor
   local.tee $0
   i32.const 0
@@ -5876,173 +6321,172 @@
   i64.const 3
   call $~lib/typedarray/Uint64Array#__set
   local.get $0
-  i32.const 3
-  i64.const 4
-  call $~lib/typedarray/Uint64Array#__set
-  local.get $0
-  i32.const 5
-  i64.const 5
-  call $~lib/typedarray/Uint64Array#__set
-  local.get $0
-  call $~lib/typedarray/Uint64Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint64Array,u64>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.const 0
+  call $~lib/typedarray/Uint64Array#__get
+  i64.const 1
+  i64.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 390
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  i32.load offset=8
-  i32.const 3
-  i32.shr_u
-  i32.const 3
-  i32.ne
+  i32.const 1
+  call $~lib/typedarray/Uint64Array#__get
+  i64.const 4
+  i64.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 391
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
-  i32.const 0
+  i32.const 2
   call $~lib/typedarray/Uint64Array#__get
-  i64.const 3
+  i64.const 9
   i64.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
-  i32.const 1
-  call $~lib/typedarray/Uint64Array#__get
-  i64.const 4
-  i64.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 393
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
   local.get $1
-  i32.const 2
-  call $~lib/typedarray/Uint64Array#__get
-  i64.const 5
-  i64.ne
+  i32.const 8332
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1312
-   i32.const 394
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result f32)
   local.get $0
-  f32.const 2
-  f32.gt
+  local.get $0
+  f32.mul
  )
- (func $~lib/typedarray/Float32Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Float32Array,f32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
+  (local $4 f32)
   (local $5 i32)
-  (local $6 f32)
+  (local $6 i32)
+  (local $7 i32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
-  local.set $4
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 12
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 2
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
-   local.get $1
-   local.get $4
+   local.get $2
+   local.get $3
    i32.lt_s
    if
-    local.get $0
-    local.get $1
+    local.get $5
+    local.get $2
     i32.const 2
     i32.shl
+    local.tee $7
     i32.add
     f32.load
-    local.set $6
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $6
-    f32.const 2
-    f32.gt
-    if
-     local.get $5
-     local.get $3
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     f32.store
-     local.get $3
-     i32.const 1
-     i32.add
-     local.set $3
-    end
     local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    f32.mul
+    f32.store
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $3
-  i32.const 2
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>
+ (func $~lib/typedarray/Float32Array#__get (param $0 i32) (param $1 i32) (result f32)
+  local.get $1
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  i32.ge_u
+  if
+   i32.const 1376
+   i32.const 1440
+   i32.const 1176
+   i32.const 64
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  f32.load
+ )
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Float32Array#constructor
   local.tee $0
   i32.const 0
@@ -6057,48 +6501,16 @@
   f32.const 3
   call $~lib/typedarray/Float32Array#__set
   local.get $0
-  i32.const 3
-  f32.const 4
-  call $~lib/typedarray/Float32Array#__set
-  local.get $0
-  i32.const 5
-  f32.const 5
-  call $~lib/typedarray/Float32Array#__set
-  local.get $0
-  call $~lib/typedarray/Float32Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Float32Array,f32>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=8
-  i32.const 2
-  i32.shr_u
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
   i32.const 0
   call $~lib/typedarray/Float32Array#__get
-  f32.const 3
+  f32.const 1
   f32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -6111,7 +6523,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -6119,111 +6531,119 @@
   local.get $1
   i32.const 2
   call $~lib/typedarray/Float32Array#__get
-  f32.const 5
+  f32.const 9
   f32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result f64)
   local.get $0
-  f64.const 2
-  f64.gt
+  local.get $0
+  f64.mul
  )
- (func $~lib/typedarray/Float64Array#filter (param $0 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Float64Array,f64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
+  (local $4 f64)
   (local $5 i32)
-  (local $6 f64)
+  (local $6 i32)
+  (local $7 i32)
   local.get $0
   i32.load offset=8
   i32.const 3
   i32.shr_u
-  local.set $4
+  local.set $3
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 13
-  call $~lib/rt/tlsf/__alloc
-  local.set $2
-  local.get $4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $3
   i32.const 3
   i32.shl
+  local.tee $6
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $0
-  i32.load offset=4
-  local.set $0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $1
   loop $for-loop|0
-   local.get $1
-   local.get $4
+   local.get $2
+   local.get $3
    i32.lt_s
    if
-    local.get $0
-    local.get $1
+    local.get $5
+    local.get $2
     i32.const 3
     i32.shl
+    local.tee $7
     i32.add
     f64.load
-    local.set $6
+    local.set $4
     i32.const 3
     global.set $~argumentsLength
-    local.get $6
-    f64.const 2
-    f64.gt
-    if
-     local.get $5
-     local.get $3
-     i32.const 3
-     i32.shl
-     i32.add
-     local.get $6
-     f64.store
-     local.get $3
-     i32.const 1
-     i32.add
-     local.set $3
-    end
     local.get $1
+    local.get $7
+    i32.add
+    local.get $4
+    local.get $4
+    f64.mul
+    f64.store
+    local.get $2
     i32.const 1
     i32.add
-    local.set $1
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
-  local.get $5
-  local.get $3
-  i32.const 3
-  i32.shl
-  local.tee $0
-  call $~lib/rt/tlsf/__realloc
-  local.tee $1
+  local.get $0
+  local.get $1
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $0
-  i32.store offset=8
-  local.get $2
   local.get $1
   i32.store offset=4
-  local.get $2
+  local.get $0
+  local.get $6
+  i32.store offset=8
+  local.get $0
   call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>
+ (func $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
   (local $1 i32)
-  i32.const 6
+  i32.const 3
   call $~lib/typedarray/Float64Array#constructor
   local.tee $0
   i32.const 0
@@ -6238,48 +6658,16 @@
   f64.const 3
   call $~lib/typedarray/Float64Array#__set
   local.get $0
-  i32.const 3
-  f64.const 4
-  call $~lib/typedarray/Float64Array#__set
-  local.get $0
-  i32.const 5
-  f64.const 5
-  call $~lib/typedarray/Float64Array#__set
-  local.get $0
-  call $~lib/typedarray/Float64Array#filter
+  call $~lib/typedarray/MAP<~lib/typedarray/Float64Array,f64>
   local.tee $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 390
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  i32.load offset=8
-  i32.const 3
-  i32.shr_u
-  i32.const 3
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 391
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
   i32.const 0
   call $~lib/typedarray/Float64Array#__get
-  f64.const 3
+  f64.const 1
   f64.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 392
+   i32.const 365
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -6292,7 +6680,7 @@
   if
    i32.const 0
    i32.const 1312
-   i32.const 393
+   i32.const 366
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -6300,1144 +6688,3503 @@
   local.get $1
   i32.const 2
   call $~lib/typedarray/Float64Array#__get
-  f64.const 5
+  f64.const 9
   f64.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 394
+   i32.const 367
    i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  i32.const 255
-  i32.and
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
   i32.const 2
-  i32.eq
+  i32.gt_s
  )
- (func $~lib/typedarray/Int8Array#some (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
+ (func $~lib/rt/tlsf/reallocateBlock (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $3
-  local.get $0
-  i32.load offset=8
-  local.set $4
-  loop $for-loop|0
+  local.get $2
+  call $~lib/rt/tlsf/prepareSize
+  local.tee $3
+  local.get $1
+  i32.load
+  local.tee $5
+  i32.const -4
+  i32.and
+  i32.le_u
+  if
+   local.get $0
+   local.get $1
+   local.get $3
+   call $~lib/rt/tlsf/prepareBlock
+   local.get $1
    local.get $2
+   i32.store offset=12
+   local.get $1
+   return
+  end
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.load
+  i32.const -4
+  i32.and
+  i32.add
+  local.tee $4
+  local.set $6
+  local.get $4
+  i32.load
+  local.tee $4
+  i32.const 1
+  i32.and
+  if
+   local.get $5
+   i32.const -4
+   i32.and
+   i32.const 16
+   i32.add
    local.get $4
-   i32.lt_s
+   i32.const -4
+   i32.and
+   i32.add
+   local.tee $4
+   local.get $3
+   i32.ge_u
    if
-    block $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0
-     local.get $2
-     local.get $3
-     i32.add
-     i32.load8_s
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0
-     end
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
+    local.get $0
+    local.get $6
+    call $~lib/rt/tlsf/removeBlock
+    local.get $1
+    local.get $4
+    local.get $5
+    i32.const 3
+    i32.and
+    i32.or
+    i32.store
+    local.get $1
+    local.get $2
+    i32.store offset=12
+    local.get $0
+    local.get $1
+    local.get $3
+    call $~lib/rt/tlsf/prepareBlock
+    local.get $1
+    return
    end
   end
-  local.get $6
- )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  i32.const 255
-  i32.and
-  i32.eqz
+  local.get $2
+  local.get $1
+  i32.load offset=8
+  call $~lib/rt/tlsf/allocateBlock
+  local.tee $3
+  local.get $1
+  i32.load offset=4
+  i32.store offset=4
+  local.get $3
+  i32.const 16
+  i32.add
+  local.get $1
+  i32.const 16
+  i32.add
+  local.get $2
+  call $~lib/util/memory/memmove
+  local.get $1
+  i32.const 8332
+  i32.ge_u
+  if
+   local.get $1
+   local.get $3
+   call $~lib/rt/rtrace/onrealloc
+   local.get $0
+   local.get $1
+   call $~lib/rt/tlsf/freeBlock
+  end
+  local.get $3
  )
- (func $~lib/typedarray/Uint8Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int8Array,i8> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  i32.load offset=4
-  local.set $3
-  local.get $0
   i32.load offset=8
   local.set $4
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 3
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $6
   loop $for-loop|0
-   local.get $2
+   local.get $3
    local.get $4
    i32.lt_s
    if
-    block $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0
-     local.get $2
-     local.get $3
-     i32.add
-     i32.load8_u
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
+    local.get $3
+    local.get $6
+    i32.add
+    i32.load8_s
+    local.set $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $0
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.const 2
+    i32.gt_s
+    if
+     local.get $1
+     local.get $5
+     i32.add
+     local.get $0
+     i32.store8
      local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0
-     end
-     local.get $2
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $1
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
   end
-  local.get $6
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $1
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
+  local.get $1
+  i32.store offset=8
+  local.get $2
+  local.get $0
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Int8Array#constructor
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int8Array#__set
   local.get $0
-  i32.const 65535
-  i32.and
+  i32.const 1
   i32.const 2
-  i32.eq
- )
- (func $~lib/typedarray/Int16Array#some (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
+  call $~lib/typedarray/Int8Array#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int8Array#__set
   local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 5
+  i32.const 5
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int8Array,i8>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.load offset=8
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Int8Array#__get
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.const 1
-  i32.shr_u
-  local.set $4
-  loop $for-loop|0
-   local.get $2
-   local.get $4
-   i32.lt_s
-   if
-    block $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0
-     local.get $3
-     local.get $2
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_s
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0
-     end
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
+  call $~lib/typedarray/Int8Array#__get
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Int8Array#__get
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $6
  )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  i32.const 65535
+  i32.const 255
   i32.and
-  i32.eqz
+  i32.const 2
+  i32.gt_u
  )
- (func $~lib/typedarray/Uint16Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint8Array,u8> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  i32.load offset=4
-  local.set $3
-  local.get $0
   i32.load offset=8
-  i32.const 1
-  i32.shr_u
   local.set $4
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 4
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $6
   loop $for-loop|0
-   local.get $2
+   local.get $3
    local.get $4
    i32.lt_s
    if
-    block $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0
-     local.get $3
-     local.get $2
-     i32.const 1
-     i32.shl
+    local.get $3
+    local.get $6
+    i32.add
+    i32.load8_u
+    local.set $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $0
+    i32.const 255
+    i32.and
+    i32.const 2
+    i32.gt_u
+    if
+     local.get $1
+     local.get $5
      i32.add
-     i32.load16_u
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
      local.get $0
+     i32.store8
      local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0
-     end
-     local.get $2
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $1
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
   end
-  local.get $6
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $1
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
+  local.get $1
+  i32.store offset=8
+  local.get $2
+  local.get $0
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Uint8Array#constructor
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint8Array#__set
   local.get $0
+  i32.const 1
   i32.const 2
-  i32.eq
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.const 5
+  i32.const 5
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint8Array,u8>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=8
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Uint8Array#__get
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Uint8Array#__get
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Uint8Array#__get
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int32Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   local.get $0
-  i32.load offset=4
-  local.set $3
-  local.get $0
   i32.load offset=8
-  i32.const 2
-  i32.shr_u
   local.set $4
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 5
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $6
   loop $for-loop|0
-   local.get $2
+   local.get $3
    local.get $4
    i32.lt_s
    if
-    block $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0
-     local.get $3
-     local.get $2
-     i32.const 2
-     i32.shl
+    local.get $3
+    local.get $6
+    i32.add
+    i32.load8_u
+    local.set $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $0
+    i32.const 255
+    i32.and
+    i32.const 2
+    i32.gt_u
+    if
+     local.get $1
+     local.get $5
      i32.add
-     i32.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
      local.get $0
+     i32.store8
      local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0
-     end
-     local.get $2
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $1
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
   end
-  local.get $6
- )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $1
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $0
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
+  local.get $1
+  i32.store offset=8
+  local.get $2
   local.get $0
-  i32.eqz
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Uint8ClampedArray#constructor
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint8ClampedArray#__set
   local.get $0
-  i64.const 2
-  i64.eq
- )
- (func $~lib/typedarray/Int64Array#some (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i32)
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint8ClampedArray#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint8ClampedArray#__set
   local.get $0
-  i32.load offset=8
   i32.const 3
-  i32.shr_u
-  local.set $4
-  loop $for-loop|0
-   local.get $2
-   local.get $4
-   i32.lt_s
-   if
-    block $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0
-     local.get $3
-     local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i64_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0
-     end
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-  end
-  local.get $6
- )
- (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i64.eqz
- )
- (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  i32.const 4
+  call $~lib/typedarray/Uint8ClampedArray#__set
   local.get $0
-  f32.const 2
-  f32.eq
- )
- (func $~lib/typedarray/Float32Array#some (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 f32)
-  (local $6 i32)
+  i32.const 5
+  i32.const 5
+  call $~lib/typedarray/Uint8ClampedArray#__set
   local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint8ClampedArray,u8>
+  local.tee $1
   i32.load offset=4
-  local.set $3
-  local.get $0
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.load offset=8
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Uint8ClampedArray#__get
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Uint8ClampedArray#__get
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.const 2
-  i32.shr_u
-  local.set $4
-  loop $for-loop|0
-   local.get $2
-   local.get $4
-   i32.lt_s
-   if
-    block $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0
-     local.get $3
-     local.get $2
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $f32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0
-     end
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
+  call $~lib/typedarray/Uint8ClampedArray#__get
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $6
- )
- (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  f32.const 0
-  f32.eq
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  f64.const 2
-  f64.eq
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  i32.const 2
+  i32.gt_s
  )
- (func $~lib/typedarray/Float64Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int16Array,i16> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 f64)
+  (local $5 i32)
   (local $6 i32)
   local.get $0
-  i32.load offset=4
-  local.set $3
-  local.get $0
   i32.load offset=8
-  i32.const 3
+  i32.const 1
   i32.shr_u
   local.set $4
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 6
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 1
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $6
   loop $for-loop|0
-   local.get $2
+   local.get $1
    local.get $4
    i32.lt_s
    if
-    block $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0
+    local.get $6
+    local.get $1
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    local.set $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $0
+    i32.const 16
+    i32.shl
+    i32.const 16
+    i32.shr_s
+    i32.const 2
+    i32.gt_s
+    if
+     local.get $5
      local.get $3
-     local.get $2
-     i32.const 3
+     i32.const 1
      i32.shl
      i32.add
-     f64.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
      local.get $0
-     local.get $1
-     call_indirect (type $f64_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $6
-      br $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0
-     end
-     local.get $2
+     i32.store16
+     local.get $3
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $3
     end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
   end
-  local.get $6
- )
- (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 1
+  i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
   local.get $0
-  f64.const 0
-  f64.eq
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/typedarray/Int8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Int16Array#constructor
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
-  i32.load offset=8
-  local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $2
-     local.get $3
-     i32.add
-     i32.load8_s
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const -1
-   local.set $2
-  end
-  local.get $2
- )
- (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
-  i32.const 255
-  i32.and
+  i32.const 3
   i32.const 4
-  i32.eq
- )
- (func $~lib/typedarray/Uint8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 5
+  i32.const 5
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int16Array,i16>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.load offset=8
-  local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $2
-     local.get $3
-     i32.add
-     i32.load8_u
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const -1
-   local.set $2
+  i32.const 1
+  i32.shr_u
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Int16Array#__get
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Int16Array#__get
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Int16Array#__get
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $2
  )
- (func $~lib/typedarray/Int16Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 65535
+  i32.and
+  i32.const 2
+  i32.gt_u
+ )
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint16Array,u16> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $3
+  (local $6 i32)
   local.get $0
   i32.load offset=8
   i32.const 1
   i32.shr_u
   local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 7
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 1
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $6
+    local.get $1
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.set $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $0
+    i32.const 65535
+    i32.and
+    i32.const 2
+    i32.gt_u
     if
+     local.get $5
      local.get $3
-     local.get $2
      i32.const 1
      i32.shl
      i32.add
-     i32.load16_s
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
      local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0
-     local.get $2
+     i32.store16
+     local.get $3
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $3
     end
-   end
-   i32.const -1
-   local.set $2
-  end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
+   end
+  end
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 1
+  i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
+  local.get $0
+  i32.store offset=8
   local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Uint16Array#constructor
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint16Array#__set
   local.get $0
-  i32.const 65535
-  i32.and
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 3
   i32.const 4
-  i32.eq
- )
- (func $~lib/typedarray/Uint16Array#findIndex (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+  call $~lib/typedarray/Uint16Array#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 5
+  i32.const 5
+  call $~lib/typedarray/Uint16Array#__set
   local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint16Array,u16>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.load offset=8
   i32.const 1
   i32.shr_u
-  local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $3
-     local.get $2
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const -1
-   local.set $2
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Uint16Array#__get
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Uint16Array#__get
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Uint16Array#__get
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $2
  )
- (func $~lib/typedarray/Int32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 2
+  i32.gt_s
+ )
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int32Array,i32> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $3
+  (local $6 i32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
   local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 8
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $6
+    local.get $1
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.set $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $0
+    i32.const 2
+    i32.gt_s
     if
+     local.get $5
      local.get $3
-     local.get $2
      i32.const 2
      i32.shl
      i32.add
-     i32.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
      local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0
-     local.get $2
+     i32.store
+     local.get $3
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $3
     end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $2
   end
   local.get $2
- )
- (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
   local.get $0
-  i32.const 4
-  i32.eq
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/typedarray/Int64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i64)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Int32Array#constructor
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int32Array#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int32Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int32Array#__set
   local.get $0
-  i32.load offset=8
   i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Int32Array#__set
+  local.get $0
+  i32.const 5
+  i32.const 5
+  call $~lib/typedarray/Int32Array#__set
+  local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int32Array,i32>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=8
+  i32.const 2
   i32.shr_u
-  local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $3
-     local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i64_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const -1
-   local.set $2
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Int32Array#__get
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Int32Array#__get
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Int32Array#__get
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $2
  )
- (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  i64.const 4
-  i64.eq
+  i32.const 2
+  i32.gt_u
  )
- (func $~lib/typedarray/Float32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint32Array,u32> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 f32)
-  local.get $0
-  i32.load offset=4
-  local.set $3
+  (local $5 i32)
+  (local $6 i32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
   local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 9
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $6
+    local.get $1
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.set $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $0
+    i32.const 2
+    i32.gt_u
     if
+     local.get $5
      local.get $3
-     local.get $2
      i32.const 2
      i32.shl
      i32.add
-     f32.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
      local.get $0
-     local.get $1
-     call_indirect (type $f32_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0
-     local.get $2
+     i32.store
+     local.get $3
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $3
     end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $2
   end
   local.get $2
- )
- (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
   local.get $0
-  f32.const 4
-  f32.eq
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/typedarray/Float64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Uint32Array#constructor
+  local.tee $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint32Array#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint32Array#__set
   local.get $0
-  i32.load offset=8
+  i32.const 2
   i32.const 3
-  i32.shr_u
-  local.set $4
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $3
-     local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $f64_i32_i32_=>_i32)
-     br_if $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const -1
-   local.set $2
-  end
-  local.get $2
- )
- (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  call $~lib/typedarray/Uint32Array#__set
   local.get $0
-  f64.const 4
-  f64.eq
- )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Uint32Array#__set
   local.get $0
-  i32.const 24
-  i32.shl
-  i32.const 24
-  i32.shr_s
-  i32.const 2
-  i32.rem_s
-  i32.eqz
- )
- (func $~lib/typedarray/Int8Array#every (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
+  i32.const 5
+  i32.const 5
+  call $~lib/typedarray/Uint32Array#__set
   local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint32Array,u32>
+  local.tee $1
   i32.load offset=4
-  local.set $3
-  local.get $0
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.load offset=8
-  local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $2
-     local.get $3
-     i32.add
-     i32.load8_s
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const 1
-   local.set $6
+  i32.const 2
+  i32.shr_u
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Uint32Array#__get
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Uint32Array#__get
+  i32.const 4
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Uint32Array#__get
+  i32.const 5
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $6
  )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  i32.const 1
-  i32.and
-  i32.eqz
+  i64.const 2
+  i64.gt_s
  )
- (func $~lib/typedarray/Uint8Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int64Array,i64> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $3
+  (local $6 i64)
   local.get $0
   i32.load offset=8
+  i32.const 3
+  i32.shr_u
   local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 10
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 3
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $0
+    local.get $1
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.set $6
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $6
+    i64.const 2
+    i64.gt_s
     if
-     local.get $2
+     local.get $5
      local.get $3
-     i32.add
-     i32.load8_u
      i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0
-     local.get $2
+     i32.shl
+     i32.add
+     local.get $6
+     i64.store
+     local.get $3
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $3
     end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
   end
-  local.get $6
- )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i32.const 16
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 3
   i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
   i32.const 16
-  i32.shr_s
-  i32.const 2
-  i32.rem_s
-  i32.eqz
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
+  local.get $0
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
  )
- (func $~lib/typedarray/Int16Array#every (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Int64Array#constructor
+  local.tee $0
+  i32.const 0
+  i64.const 1
+  call $~lib/typedarray/Int64Array#__set
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.const 1
+  i64.const 2
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.const 2
+  i64.const 3
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.const 3
+  i64.const 4
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.const 5
+  i64.const 5
+  call $~lib/typedarray/Int64Array#__set
   local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int64Array,i64>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
   i32.load offset=8
-  i32.const 1
+  i32.const 3
   i32.shr_u
-  local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $3
-     local.get $2
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_s
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const 1
-   local.set $6
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
   end
-  local.get $6
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Int64Array#__get
+  i64.const 3
+  i64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Int64Array#__get
+  i64.const 4
+  i64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Int64Array#__get
+  i64.const 5
+  i64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i64.const 2
+  i64.gt_u
  )
- (func $~lib/typedarray/Uint16Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint64Array,u64> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $3
+  (local $6 i64)
   local.get $0
   i32.load offset=8
-  i32.const 1
+  i32.const 3
   i32.shr_u
   local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 11
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 3
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $0
+    local.get $1
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.set $6
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $6
+    i64.const 2
+    i64.gt_u
     if
+     local.get $5
      local.get $3
-     local.get $2
-     i32.const 1
+     i32.const 3
      i32.shl
      i32.add
-     i32.load16_u
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0
-     local.get $2
+     local.get $6
+     i64.store
+     local.get $3
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $3
     end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
   end
-  local.get $6
- )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i32.const 2
-  i32.rem_s
-  i32.eqz
- )
- (func $~lib/typedarray/Int32Array#every (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 3
+  i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
   local.get $0
-  i32.load offset=4
-  local.set $3
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
+ )
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Uint64Array#constructor
+  local.tee $0
+  i32.const 0
+  i64.const 1
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.const 1
+  i64.const 2
+  call $~lib/typedarray/Uint64Array#__set
   local.get $0
-  i32.load offset=8
   i32.const 2
+  i64.const 3
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.const 3
+  i64.const 4
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.const 5
+  i64.const 5
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint64Array,u64>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=8
+  i32.const 3
   i32.shr_u
-  local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $3
-     local.get $2
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i32_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const 1
-   local.set $6
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Uint64Array#__get
+  i64.const 3
+  i64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Uint64Array#__get
+  i64.const 4
+  i64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Uint64Array#__get
+  i64.const 5
+  i64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $6
  )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
-  i64.const 2
-  i64.rem_s
-  i64.eqz
+  f32.const 2
+  f32.gt
  )
- (func $~lib/typedarray/Int64Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Float32Array,f32> (param $0 i32) (result i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i64)
-  (local $6 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $3
+  (local $5 i32)
+  (local $6 f32)
   local.get $0
   i32.load offset=8
-  i32.const 3
+  i32.const 2
   i32.shr_u
   local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 12
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $0
+    local.get $1
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    local.set $6
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $6
+    f32.const 2
+    f32.gt
     if
+     local.get $5
      local.get $3
-     local.get $2
-     i32.const 3
+     i32.const 2
      i32.shl
      i32.add
-     i64.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $i64_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0
-     local.get $2
+     local.get $6
+     f32.store
+     local.get $3
      i32.const 1
      i32.add
-     local.set $2
-     br $for-loop|0
+     local.set $3
     end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
   end
-  local.get $6
- )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  i64.const 2
-  i64.rem_u
-  i64.eqz
- )
- (func $~lib/math/NativeMathf.mod (param $0 f32) (result f32)
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 2
+  i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
+  local.get $0
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
+ )
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Float32Array#constructor
+  local.tee $0
+  i32.const 0
+  f32.const 1
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 1
+  f32.const 2
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 2
+  f32.const 3
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 3
+  f32.const 4
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 5
+  f32.const 5
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Float32Array,f32>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Float32Array#__get
+  f32.const 3
+  f32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Float32Array#__get
+  f32.const 4
+  f32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Float32Array#__get
+  f32.const 5
+  f32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  f64.const 2
+  f64.gt
+ )
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Float64Array,f64> (param $0 i32) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 f64)
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  call $~lib/rt/tlsf/maybeInitialize
+  i32.const 12
+  i32.const 13
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $4
+  i32.const 3
+  i32.shl
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.set $5
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $0
+    local.get $1
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    local.set $6
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $6
+    f64.const 2
+    f64.gt
+    if
+     local.get $5
+     local.get $3
+     i32.const 3
+     i32.shl
+     i32.add
+     local.get $6
+     f64.store
+     local.get $3
+     i32.const 1
+     i32.add
+     local.set $3
+    end
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
+   end
+  end
+  local.get $2
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $5
+  call $~lib/rt/tlsf/checkUsedBlock
+  local.get $3
+  i32.const 3
+  i32.shl
+  local.tee $0
+  call $~lib/rt/tlsf/reallocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  call $~lib/rt/pure/__retain
+  i32.store
+  local.get $2
+  local.get $0
+  i32.store offset=8
+  local.get $2
+  local.get $1
+  i32.store offset=4
+  local.get $2
+  call $~lib/rt/pure/__retain
+ )
+ (func $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>
+  (local $0 i32)
+  (local $1 i32)
+  i32.const 6
+  call $~lib/typedarray/Float64Array#constructor
+  local.tee $0
+  i32.const 0
+  f64.const 1
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 1
+  f64.const 2
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 2
+  f64.const 3
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 3
+  f64.const 4
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 5
+  f64.const 5
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  call $~lib/typedarray/FILTER<~lib/typedarray/Float64Array,f64>
+  local.tee $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 390
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 391
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 0
+  call $~lib/typedarray/Float64Array#__get
+  f64.const 3
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 392
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 1
+  call $~lib/typedarray/Float64Array#__get
+  f64.const 4
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 393
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 2
+  call $~lib/typedarray/Float64Array#__get
+  f64.const 5
+  f64.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 394
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 255
+  i32.and
+  i32.const 2
+  i32.eq
+ )
+ (func $~lib/typedarray/Int8Array#some (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  block $__inlined_func$~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8> (result i32)
+   local.get $0
+   i32.load offset=4
+   local.set $3
+   local.get $0
+   i32.load offset=8
+   local.set $4
+   loop $for-loop|0
+    local.get $2
+    local.get $4
+    i32.lt_s
+    if
+     local.get $2
+     local.get $3
+     i32.add
+     i32.load8_s
+     local.set $5
+     i32.const 3
+     global.set $~argumentsLength
+     i32.const 1
+     local.get $5
+     local.get $2
+     local.get $0
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     br_if $__inlined_func$~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>
+     drop
+     local.get $2
+     i32.const 1
+     i32.add
+     local.set $2
+     br $for-loop|0
+    end
+   end
+   i32.const 0
+  end
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 255
+  i32.and
+  i32.eqz
+ )
+ (func $~lib/typedarray/Uint8Array#some (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  block $__inlined_func$~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8> (result i32)
+   local.get $0
+   i32.load offset=4
+   local.set $3
+   local.get $0
+   i32.load offset=8
+   local.set $4
+   loop $for-loop|0
+    local.get $2
+    local.get $4
+    i32.lt_s
+    if
+     local.get $2
+     local.get $3
+     i32.add
+     i32.load8_u
+     local.set $5
+     i32.const 3
+     global.set $~argumentsLength
+     i32.const 1
+     local.get $5
+     local.get $2
+     local.get $0
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     br_if $__inlined_func$~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>
+     drop
+     local.get $2
+     i32.const 1
+     i32.add
+     local.set $2
+     br $for-loop|0
+    end
+   end
+   i32.const 0
+  end
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 65535
+  i32.and
+  i32.const 2
+  i32.eq
+ )
+ (func $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    if
+     i32.const 1
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 0
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 65535
+  i32.and
+  i32.eqz
+ )
+ (func $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    if
+     i32.const 1
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 0
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 2
+  i32.eq
+ )
+ (func $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    if
+     i32.const 1
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 0
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.eqz
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i64.const 2
+  i64.eq
+ )
+ (func $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i64)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i64_i32_i32_=>_i32)
+    if
+     i32.const 1
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 0
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i64.eqz
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  f32.const 2
+  f32.eq
+ )
+ (func $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $f32_i32_i32_=>_i32)
+    if
+     i32.const 1
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 0
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  f32.const 0
+  f32.eq
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  f64.const 2
+  f64.eq
+ )
+ (func $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f64)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $f64_i32_i32_=>_i32)
+    if
+     i32.const 1
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 0
+ )
+ (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  f64.const 0
+  f64.eq
+ )
+ (func $~lib/typedarray/Int8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  local.set $2
+  i32.const 0
+  local.set $0
+  local.get $2
+  i32.load offset=4
+  local.set $3
+  local.get $2
+  i32.load offset=8
+  local.set $4
+  block $__inlined_func$~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>
+   loop $for-loop|0
+    local.get $0
+    local.get $4
+    i32.lt_s
+    if
+     local.get $0
+     local.get $3
+     i32.add
+     i32.load8_s
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $0
+     local.get $2
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     br_if $__inlined_func$~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $for-loop|0
+    end
+   end
+   i32.const -1
+   local.set $0
+  end
+  local.get $0
+ )
+ (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 255
+  i32.and
+  i32.const 4
+  i32.eq
+ )
+ (func $~lib/typedarray/Uint8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  local.set $2
+  i32.const 0
+  local.set $0
+  local.get $2
+  i32.load offset=4
+  local.set $3
+  local.get $2
+  i32.load offset=8
+  local.set $4
+  block $__inlined_func$~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>
+   loop $for-loop|0
+    local.get $0
+    local.get $4
+    i32.lt_s
+    if
+     local.get $0
+     local.get $3
+     i32.add
+     i32.load8_u
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $0
+     local.get $2
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     br_if $__inlined_func$~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>
+     local.get $0
+     i32.const 1
+     i32.add
+     local.set $0
+     br $for-loop|0
+    end
+   end
+   i32.const -1
+   local.set $0
+  end
+  local.get $0
+ )
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    if
+     local.get $2
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const -1
+ )
+ (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 65535
+  i32.and
+  i32.const 4
+  i32.eq
+ )
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    if
+     local.get $2
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const -1
+ )
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    if
+     local.get $2
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const -1
+ )
+ (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.eq
+ )
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i64)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i64_i32_i32_=>_i32)
+    if
+     local.get $2
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const -1
+ )
+ (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i64.const 4
+  i64.eq
+ )
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $f32_i32_i32_=>_i32)
+    if
+     local.get $2
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const -1
+ )
+ (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  f32.const 4
+  f32.eq
+ )
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f64)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $f64_i32_i32_=>_i32)
+    if
+     local.get $2
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const -1
+ )
+ (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  f64.const 4
+  f64.eq
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  i32.const 2
+  i32.rem_s
+  i32.eqz
+ )
+ (func $~lib/typedarray/Int8Array#every (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  block $__inlined_func$~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8> (result i32)
+   local.get $0
+   i32.load offset=4
+   local.set $3
+   local.get $0
+   i32.load offset=8
+   local.set $4
+   loop $for-loop|0
+    local.get $2
+    local.get $4
+    i32.lt_s
+    if
+     local.get $2
+     local.get $3
+     i32.add
+     i32.load8_s
+     local.set $5
+     i32.const 3
+     global.set $~argumentsLength
+     i32.const 0
+     local.get $5
+     local.get $2
+     local.get $0
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     i32.eqz
+     br_if $__inlined_func$~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>
+     drop
+     local.get $2
+     i32.const 1
+     i32.add
+     local.set $2
+     br $for-loop|0
+    end
+   end
+   i32.const 1
+  end
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 1
+  i32.and
+  i32.eqz
+ )
+ (func $~lib/typedarray/Uint8Array#every (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  block $__inlined_func$~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8> (result i32)
+   local.get $0
+   i32.load offset=4
+   local.set $3
+   local.get $0
+   i32.load offset=8
+   local.set $4
+   loop $for-loop|0
+    local.get $2
+    local.get $4
+    i32.lt_s
+    if
+     local.get $2
+     local.get $3
+     i32.add
+     i32.load8_u
+     local.set $5
+     i32.const 3
+     global.set $~argumentsLength
+     i32.const 0
+     local.get $5
+     local.get $2
+     local.get $0
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     i32.eqz
+     br_if $__inlined_func$~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>
+     drop
+     local.get $2
+     i32.const 1
+     i32.add
+     local.set $2
+     br $for-loop|0
+    end
+   end
+   i32.const 1
+  end
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  i32.const 2
+  i32.rem_s
+  i32.eqz
+ )
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 1
+ )
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 1
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i32.const 2
+  i32.rem_s
+  i32.eqz
+ )
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 1
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i64.const 2
+  i64.rem_s
+  i64.eqz
+ )
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i64)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $i64_i32_i32_=>_i32)
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 1
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  i64.const 2
+  i64.rem_u
+  i64.eqz
+ )
+ (func $~lib/math/NativeMathf.mod (param $0 f32) (result f32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -7445,412 +10192,806 @@
   i32.const 1
   i32.const 0
   local.get $0
-  i32.reinterpret_f32
-  local.tee $1
-  i32.const 23
-  i32.shr_u
-  i32.const 255
-  i32.and
-  local.tee $2
-  i32.const 255
-  i32.eq
-  select
-  if
-   local.get $0
-   f32.const 2
-   f32.mul
-   local.tee $0
-   local.get $0
-   f32.div
-   return
-  end
-  local.get $1
-  i32.const -2147483648
-  i32.and
+  i32.reinterpret_f32
+  local.tee $1
+  i32.const 23
+  i32.shr_u
+  i32.const 255
+  i32.and
+  local.tee $2
+  i32.const 255
+  i32.eq
+  select
+  if
+   local.get $0
+   f32.const 2
+   f32.mul
+   local.tee $0
+   local.get $0
+   f32.div
+   return
+  end
+  local.get $1
+  i32.const -2147483648
+  i32.and
+  local.set $4
+  block $folding-inner0
+   local.get $1
+   i32.const 1
+   i32.shl
+   local.tee $3
+   i32.const -2147483648
+   i32.le_u
+   if
+    local.get $3
+    i32.const -2147483648
+    i32.eq
+    br_if $folding-inner0
+    local.get $0
+    return
+   end
+   local.get $2
+   if (result i32)
+    local.get $1
+    i32.const 8388607
+    i32.and
+    i32.const 8388608
+    i32.or
+   else
+    local.get $1
+    i32.const 1
+    local.get $2
+    local.get $1
+    i32.const 9
+    i32.shl
+    i32.clz
+    i32.sub
+    local.tee $2
+    i32.sub
+    i32.shl
+   end
+   local.set $1
+   loop $while-continue|0
+    local.get $2
+    i32.const 128
+    i32.gt_s
+    if
+     local.get $1
+     i32.const 8388608
+     i32.ge_u
+     if
+      local.get $1
+      i32.const 8388608
+      i32.eq
+      br_if $folding-inner0
+      local.get $1
+      i32.const 8388608
+      i32.sub
+      local.set $1
+     end
+     local.get $1
+     i32.const 1
+     i32.shl
+     local.set $1
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|0
+    end
+   end
+   local.get $1
+   i32.const 8388608
+   i32.ge_u
+   if
+    local.get $1
+    i32.const 8388608
+    i32.eq
+    br_if $folding-inner0
+    local.get $1
+    i32.const 8388608
+    i32.sub
+    local.set $1
+   end
+   local.get $1
+   local.get $1
+   i32.const 8
+   i32.shl
+   i32.clz
+   local.tee $3
+   i32.shl
+   local.set $1
+   local.get $2
+   local.get $3
+   i32.sub
+   local.tee $2
+   i32.const 0
+   i32.gt_s
+   if (result i32)
+    local.get $1
+    i32.const 8388608
+    i32.sub
+    local.get $2
+    i32.const 23
+    i32.shl
+    i32.or
+   else
+    local.get $1
+    i32.const 1
+    local.get $2
+    i32.sub
+    i32.shr_u
+   end
+   local.get $4
+   i32.or
+   f32.reinterpret_i32
+   return
+  end
+  f32.const 0
+  local.get $0
+  f32.mul
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMathf.mod
+  f32.const 0
+  f32.eq
+ )
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $f32_i32_i32_=>_i32)
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 1
+ )
+ (func $~lib/math/NativeMath.mod (param $0 f64) (result f64)
+  (local $1 i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  i32.const 1
+  i32.const 0
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $1
+  i64.const 52
+  i64.shr_u
+  i64.const 2047
+  i64.and
+  local.tee $2
+  i64.const 2047
+  i64.eq
+  select
+  if
+   local.get $0
+   f64.const 2
+   f64.mul
+   local.tee $0
+   local.get $0
+   f64.div
+   return
+  end
+  local.get $1
+  i64.const 63
+  i64.shr_u
+  local.set $4
+  block $folding-inner0
+   local.get $1
+   i64.const 1
+   i64.shl
+   local.tee $3
+   i64.const -9223372036854775808
+   i64.le_u
+   if
+    local.get $3
+    i64.const -9223372036854775808
+    i64.eq
+    br_if $folding-inner0
+    local.get $0
+    return
+   end
+   local.get $2
+   i64.eqz
+   if (result i64)
+    local.get $1
+    i64.const 0
+    local.get $2
+    local.get $1
+    i64.const 12
+    i64.shl
+    i64.clz
+    i64.sub
+    local.tee $2
+    i64.sub
+    i64.const 1
+    i64.add
+    i64.shl
+   else
+    local.get $1
+    i64.const 4503599627370495
+    i64.and
+    i64.const 4503599627370496
+    i64.or
+   end
+   local.set $1
+   loop $while-continue|0
+    local.get $2
+    i64.const 1024
+    i64.gt_s
+    if
+     local.get $1
+     i64.const 4503599627370496
+     i64.ge_u
+     if
+      local.get $1
+      i64.const 4503599627370496
+      i64.eq
+      br_if $folding-inner0
+      local.get $1
+      i64.const 4503599627370496
+      i64.sub
+      local.set $1
+     end
+     local.get $1
+     i64.const 1
+     i64.shl
+     local.set $1
+     local.get $2
+     i64.const 1
+     i64.sub
+     local.set $2
+     br $while-continue|0
+    end
+   end
+   local.get $1
+   i64.const 4503599627370496
+   i64.ge_u
+   if
+    local.get $1
+    i64.const 4503599627370496
+    i64.eq
+    br_if $folding-inner0
+    local.get $1
+    i64.const 4503599627370496
+    i64.sub
+    local.set $1
+   end
+   local.get $1
+   local.get $1
+   i64.const 11
+   i64.shl
+   i64.clz
+   local.tee $3
+   i64.shl
+   local.set $1
+   local.get $2
+   local.get $3
+   i64.sub
+   local.tee $2
+   i64.const 0
+   i64.gt_s
+   if (result i64)
+    local.get $1
+    i64.const 4503599627370496
+    i64.sub
+    local.get $2
+    i64.const 52
+    i64.shl
+    i64.or
+   else
+    local.get $1
+    i64.const 0
+    local.get $2
+    i64.sub
+    i64.const 1
+    i64.add
+    i64.shr_u
+   end
+   local.get $4
+   i64.const 63
+   i64.shl
+   i64.or
+   f64.reinterpret_i64
+   return
+  end
+  f64.const 0
+  local.get $0
+  f64.mul
+ )
+ (func $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  call $~lib/math/NativeMath.mod
+  f64.const 0
+  f64.eq
+ )
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f64)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $2
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
+    local.get $1
+    call_indirect (type $f64_i32_i32_=>_i32)
+    i32.eqz
+    if
+     i32.const 0
+     return
+    end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
+   end
+  end
+  i32.const 1
+ )
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  i32.const 255
+  i32.and
+  i32.const 2704
+  local.get $1
+  call $~lib/array/Array<i32>#__get
+  i32.const 255
+  i32.and
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 490
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  global.get $std/typedarray/forEachCallCount
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 491
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  global.get $std/typedarray/forEachSelf
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 492
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/typedarray/forEachCallCount
+  i32.const 1
+  i32.add
+  global.set $std/typedarray/forEachCallCount
+ )
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  i32.const 0
+  global.set $std/typedarray/forEachCallCount
+  i32.const 3
+  call $~lib/typedarray/Int8Array#constructor
+  local.tee $2
+  local.tee $0
+  global.set $std/typedarray/forEachSelf
+  local.get $0
+  i32.const 0
+  i32.const 2704
+  i32.const 0
+  call $~lib/array/Array<i32>#__get
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2704
+  i32.const 1
+  call $~lib/array/Array<i32>#__get
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 2704
+  i32.const 2
+  call $~lib/array/Array<i32>#__get
+  i32.const 24
+  i32.shl
+  i32.const 24
+  i32.shr_s
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
   local.set $4
-  block $folding-inner0
+  loop $for-loop|0
    local.get $1
-   i32.const 1
-   i32.shl
-   local.tee $3
-   i32.const -2147483648
-   i32.le_u
+   local.get $4
+   i32.lt_s
    if
+    local.get $1
     local.get $3
-    i32.const -2147483648
-    i32.eq
-    br_if $folding-inner0
-    local.get $0
-    return
-   end
-   local.get $2
-   if (result i32)
+    i32.add
+    i32.load8_s
+    i32.const 3
+    global.set $~argumentsLength
     local.get $1
-    i32.const 8388607
-    i32.and
-    i32.const 8388608
-    i32.or
-   else
+    local.get $0
+    call $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0
     local.get $1
     i32.const 1
-    local.get $2
-    local.get $1
-    i32.const 9
-    i32.shl
-    i32.clz
-    i32.sub
-    local.tee $2
-    i32.sub
-    i32.shl
-   end
-   local.set $1
-   loop $while-continue|0
-    local.get $2
-    i32.const 128
-    i32.gt_s
-    if
-     local.get $1
-     i32.const 8388608
-     i32.ge_u
-     if
-      local.get $1
-      i32.const 8388608
-      i32.eq
-      br_if $folding-inner0
-      local.get $1
-      i32.const 8388608
-      i32.sub
-      local.set $1
-     end
-     local.get $1
-     i32.const 1
-     i32.shl
-     local.set $1
-     local.get $2
-     i32.const 1
-     i32.sub
-     local.set $2
-     br $while-continue|0
-    end
-   end
-   local.get $1
-   i32.const 8388608
-   i32.ge_u
-   if
-    local.get $1
-    i32.const 8388608
-    i32.eq
-    br_if $folding-inner0
-    local.get $1
-    i32.const 8388608
-    i32.sub
+    i32.add
     local.set $1
+    br $for-loop|0
    end
-   local.get $1
-   local.get $1
-   i32.const 8
-   i32.shl
-   i32.clz
-   local.tee $3
-   i32.shl
-   local.set $1
+  end
+  global.get $std/typedarray/forEachCallCount
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 495
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
    local.get $2
-   local.get $3
+   i32.const 16
    i32.sub
-   local.tee $2
-   i32.const 0
-   i32.gt_s
-   if (result i32)
-    local.get $1
-    i32.const 8388608
-    i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  local.set $4
+  loop $for-loop|0
+   local.get $2
+   local.get $4
+   i32.lt_s
+   if
     local.get $2
-    i32.const 23
-    i32.shl
-    i32.or
-   else
+    local.get $3
+    i32.add
+    i32.load8_u
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $2
+    local.get $0
     local.get $1
-    i32.const 1
+    call_indirect (type $i32_i32_i32_=>_none)
     local.get $2
-    i32.sub
-    i32.shr_u
+    i32.const 1
+    i32.add
+    local.set $2
+    br $for-loop|0
    end
-   local.get $4
-   i32.or
-   f32.reinterpret_i32
-   return
   end
-  f32.const 0
+ )
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
-  f32.mul
+  i32.const 65535
+  i32.and
+  i32.const 2704
+  local.get $1
+  call $~lib/array/Array<i32>#__get
+  i32.const 65535
+  i32.and
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 490
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  global.get $std/typedarray/forEachCallCount
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 491
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  global.get $std/typedarray/forEachSelf
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 492
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  global.get $std/typedarray/forEachCallCount
+  i32.const 1
+  i32.add
+  global.set $std/typedarray/forEachCallCount
  )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  i32.const 0
+  global.set $std/typedarray/forEachCallCount
+  i32.const 3
+  call $~lib/typedarray/Int16Array#constructor
+  local.tee $2
+  local.tee $0
+  global.set $std/typedarray/forEachSelf
+  local.get $0
+  i32.const 0
+  i32.const 2704
+  i32.const 0
+  call $~lib/array/Array<i32>#__get
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2704
+  i32.const 1
+  call $~lib/array/Array<i32>#__get
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
-  call $~lib/math/NativeMathf.mod
-  f32.const 0
-  f32.eq
- )
- (func $~lib/typedarray/Float32Array#every (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 f32)
-  (local $6 i32)
+  i32.const 2
+  i32.const 2704
+  i32.const 2
+  call $~lib/array/Array<i32>#__get
+  i32.const 16
+  i32.shl
+  i32.const 16
+  i32.shr_s
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
   i32.load offset=4
   local.set $3
   local.get $0
   i32.load offset=8
-  i32.const 2
-  i32.shr_u
-  local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $3
-     local.get $2
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $f32_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
-   end
-   i32.const 1
-   local.set $6
-  end
-  local.get $6
- )
- (func $~lib/math/NativeMath.mod (param $0 f64) (result f64)
-  (local $1 i64)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 i64)
   i32.const 1
-  i32.const 0
-  local.get $0
-  i64.reinterpret_f64
-  local.tee $1
-  i64.const 52
-  i64.shr_u
-  i64.const 2047
-  i64.and
-  local.tee $2
-  i64.const 2047
-  i64.eq
-  select
-  if
-   local.get $0
-   f64.const 2
-   f64.mul
-   local.tee $0
-   local.get $0
-   f64.div
-   return
-  end
-  local.get $1
-  i64.const 63
-  i64.shr_u
+  i32.shr_u
   local.set $4
-  block $folding-inner0
+  loop $for-loop|0
    local.get $1
-   i64.const 1
-   i64.shl
-   local.tee $3
-   i64.const -9223372036854775808
-   i64.le_u
+   local.get $4
+   i32.lt_s
    if
     local.get $3
-    i64.const -9223372036854775808
-    i64.eq
-    br_if $folding-inner0
-    local.get $0
-    return
-   end
-   local.get $2
-   i64.eqz
-   if (result i64)
-    local.get $1
-    i64.const 0
-    local.get $2
-    local.get $1
-    i64.const 12
-    i64.shl
-    i64.clz
-    i64.sub
-    local.tee $2
-    i64.sub
-    i64.const 1
-    i64.add
-    i64.shl
-   else
     local.get $1
-    i64.const 4503599627370495
-    i64.and
-    i64.const 4503599627370496
-    i64.or
-   end
-   local.set $1
-   loop $while-continue|0
-    local.get $2
-    i64.const 1024
-    i64.gt_s
-    if
-     local.get $1
-     i64.const 4503599627370496
-     i64.ge_u
-     if
-      local.get $1
-      i64.const 4503599627370496
-      i64.eq
-      br_if $folding-inner0
-      local.get $1
-      i64.const 4503599627370496
-      i64.sub
-      local.set $1
-     end
-     local.get $1
-     i64.const 1
-     i64.shl
-     local.set $1
-     local.get $2
-     i64.const 1
-     i64.sub
-     local.set $2
-     br $while-continue|0
-    end
-   end
-   local.get $1
-   i64.const 4503599627370496
-   i64.ge_u
-   if
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    i32.const 3
+    global.set $~argumentsLength
     local.get $1
-    i64.const 4503599627370496
-    i64.eq
-    br_if $folding-inner0
+    local.get $0
+    call $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0
     local.get $1
-    i64.const 4503599627370496
-    i64.sub
+    i32.const 1
+    i32.add
     local.set $1
+    br $for-loop|0
    end
-   local.get $1
-   local.get $1
-   i64.const 11
-   i64.shl
-   i64.clz
-   local.tee $3
-   i64.shl
-   local.set $1
+  end
+  global.get $std/typedarray/forEachCallCount
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 495
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
    local.get $2
-   local.get $3
-   i64.sub
-   local.tee $2
-   i64.const 0
-   i64.gt_s
-   if (result i64)
-    local.get $1
-    i64.const 4503599627370496
-    i64.sub
-    local.get $2
-    i64.const 52
-    i64.shl
-    i64.or
-   else
-    local.get $1
-    i64.const 0
-    local.get $2
-    i64.sub
-    i64.const 1
-    i64.add
-    i64.shr_u
-   end
-   local.get $4
-   i64.const 63
-   i64.shl
-   i64.or
-   f64.reinterpret_i64
-   return
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  f64.const 0
-  local.get $0
-  f64.mul
- )
- (func $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
-  local.get $0
-  call $~lib/math/NativeMath.mod
-  f64.const 0
-  f64.eq
  )
- (func $~lib/typedarray/Float64Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>
+  (local $0 i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 f64)
-  (local $6 i32)
+  (local $5 i32)
+  i32.const 0
+  global.set $std/typedarray/forEachCallCount
+  i32.const 3
+  call $~lib/typedarray/Uint16Array#constructor
+  local.tee $2
+  local.tee $0
+  global.set $std/typedarray/forEachSelf
+  local.get $0
+  i32.const 0
+  i32.const 2704
+  i32.const 0
+  call $~lib/array/Array<i32>#__get
+  i32.const 65535
+  i32.and
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2704
+  i32.const 1
+  call $~lib/array/Array<i32>#__get
+  i32.const 65535
+  i32.and
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 2704
+  i32.const 2
+  call $~lib/array/Array<i32>#__get
+  i32.const 65535
+  i32.and
+  call $~lib/typedarray/Uint16Array#__set
   local.get $0
   i32.load offset=4
   local.set $3
   local.get $0
   i32.load offset=8
-  i32.const 3
+  i32.const 1
   i32.shr_u
   local.set $4
-  block $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0
-   loop $for-loop|0
-    local.get $2
-    local.get $4
-    i32.lt_s
-    if
-     local.get $3
-     local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     local.get $0
-     local.get $1
-     call_indirect (type $f64_i32_i32_=>_i32)
-     i32.eqz
-     br_if $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $for-loop|0
-    end
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $1
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    local.get $0
+    call $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
   end
-  local.get $6
+  global.get $std/typedarray/forEachCallCount
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 495
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32)
-  local.get $0
-  i32.const 255
-  i32.and
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32)
   i32.const 2704
   local.get $1
   call $~lib/array/Array<i32>#__get
-  i32.const 255
-  i32.and
+  local.get $0
   i32.ne
   if
    i32.const 0
@@ -7887,7 +11028,7 @@
   i32.add
   global.set $std/typedarray/forEachCallCount
  )
- (func $~lib/typedarray/Uint8Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -7897,16 +11038,20 @@
   local.set $3
   local.get $0
   i32.load offset=8
+  i32.const 2
+  i32.shr_u
   local.set $4
   loop $for-loop|0
    local.get $2
    local.get $4
    i32.lt_s
    if
-    local.get $2
     local.get $3
+    local.get $2
+    i32.const 2
+    i32.shl
     i32.add
-    i32.load8_u
+    i32.load
     i32.const 3
     global.set $~argumentsLength
     local.get $2
@@ -7921,57 +11066,13 @@
    end
   end
  )
- (func $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32)
   local.get $0
-  i32.const 65535
-  i32.and
-  i32.const 2704
-  local.get $1
-  call $~lib/array/Array<i32>#__get
-  i32.const 65535
-  i32.and
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 490
-   i32.const 5
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  global.get $std/typedarray/forEachCallCount
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 491
-   i32.const 5
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  global.get $std/typedarray/forEachSelf
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 492
-   i32.const 5
-   call $~lib/builtins/abort
-   unreachable
-  end
-  global.get $std/typedarray/forEachCallCount
-  i32.const 1
-  i32.add
-  global.set $std/typedarray/forEachCallCount
- )
- (func $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32)
   i32.const 2704
   local.get $1
   call $~lib/array/Array<i32>#__get
-  local.get $0
-  i32.ne
+  i64.extend_i32_s
+  i64.ne
   if
    i32.const 0
    i32.const 1312
@@ -8007,17 +11108,17 @@
   i32.add
   global.set $std/typedarray/forEachCallCount
  )
- (func $~lib/typedarray/Int32Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
+  (local $5 i64)
   local.get $0
   i32.load offset=4
   local.set $3
   local.get $0
   i32.load offset=8
-  i32.const 2
+  i32.const 3
   i32.shr_u
   local.set $4
   loop $for-loop|0
@@ -8027,16 +11128,16 @@
    if
     local.get $3
     local.get $2
-    i32.const 2
+    i32.const 3
     i32.shl
     i32.add
-    i32.load
+    i64.load
     i32.const 3
     global.set $~argumentsLength
     local.get $2
     local.get $0
     local.get $1
-    call_indirect (type $i32_i32_i32_=>_none)
+    call_indirect (type $i64_i32_i32_=>_none)
     local.get $2
     i32.const 1
     i32.add
@@ -8045,13 +11146,13 @@
    end
   end
  )
- (func $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>~anonymous|0 (param $0 i64) (param $1 i32) (param $2 i32)
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32)
   local.get $0
   i32.const 2704
   local.get $1
   call $~lib/array/Array<i32>#__get
-  i64.extend_i32_s
-  i64.ne
+  f32.convert_i32_s
+  f32.ne
   if
    i32.const 0
    i32.const 1312
@@ -8087,51 +11188,100 @@
   i32.add
   global.set $std/typedarray/forEachCallCount
  )
- (func $~lib/typedarray/Int64Array#forEach (param $0 i32) (param $1 i32)
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>
+  (local $0 i32)
+  (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i64)
+  (local $5 f32)
+  i32.const 0
+  global.set $std/typedarray/forEachCallCount
+  i32.const 3
+  call $~lib/typedarray/Float32Array#constructor
+  local.tee $2
+  local.tee $0
+  global.set $std/typedarray/forEachSelf
+  local.get $0
+  i32.const 0
+  i32.const 2704
+  i32.const 0
+  call $~lib/array/Array<i32>#__get
+  f32.convert_i32_s
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2704
+  i32.const 1
+  call $~lib/array/Array<i32>#__get
+  f32.convert_i32_s
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 2704
+  i32.const 2
+  call $~lib/array/Array<i32>#__get
+  f32.convert_i32_s
+  call $~lib/typedarray/Float32Array#__set
   local.get $0
   i32.load offset=4
   local.set $3
   local.get $0
   i32.load offset=8
-  i32.const 3
+  i32.const 2
   i32.shr_u
   local.set $4
   loop $for-loop|0
-   local.get $2
+   local.get $1
    local.get $4
    i32.lt_s
    if
     local.get $3
-    local.get $2
-    i32.const 3
+    local.get $1
+    i32.const 2
     i32.shl
     i32.add
-    i64.load
+    f32.load
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     local.get $0
+    call $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0
     local.get $1
-    call_indirect (type $i64_i32_i32_=>_none)
-    local.get $2
     i32.const 1
     i32.add
-    local.set $2
+    local.set $1
     br $for-loop|0
    end
   end
+  global.get $std/typedarray/forEachCallCount
+  i32.const 3
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 495
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0 (param $0 f32) (param $1 i32) (param $2 i32)
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32)
   local.get $0
   i32.const 2704
   local.get $1
   call $~lib/array/Array<i32>#__get
-  f32.convert_i32_s
-  f32.ne
+  f64.convert_i32_s
+  f64.ne
   if
    i32.const 0
    i32.const 1312
@@ -8164,52 +11314,97 @@
   end
   global.get $std/typedarray/forEachCallCount
   i32.const 1
-  i32.add
-  global.set $std/typedarray/forEachCallCount
- )
- (func $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0 (param $0 f64) (param $1 i32) (param $2 i32)
+  i32.add
+  global.set $std/typedarray/forEachCallCount
+ )
+ (func $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 f64)
+  i32.const 0
+  global.set $std/typedarray/forEachCallCount
+  i32.const 3
+  call $~lib/typedarray/Float64Array#constructor
+  local.tee $2
+  local.tee $0
+  global.set $std/typedarray/forEachSelf
+  local.get $0
+  i32.const 0
+  i32.const 2704
+  i32.const 0
+  call $~lib/array/Array<i32>#__get
+  f64.convert_i32_s
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2704
+  i32.const 1
+  call $~lib/array/Array<i32>#__get
+  f64.convert_i32_s
+  call $~lib/typedarray/Float64Array#__set
   local.get $0
+  i32.const 2
   i32.const 2704
-  local.get $1
+  i32.const 2
   call $~lib/array/Array<i32>#__get
   f64.convert_i32_s
-  f64.ne
-  if
-   i32.const 0
-   i32.const 1312
-   i32.const 490
-   i32.const 5
-   call $~lib/builtins/abort
-   unreachable
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.set $4
+  loop $for-loop|0
+   local.get $1
+   local.get $4
+   i32.lt_s
+   if
+    local.get $3
+    local.get $1
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    local.get $0
+    call $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0
+    local.get $1
+    i32.const 1
+    i32.add
+    local.set $1
+    br $for-loop|0
+   end
   end
-  local.get $1
   global.get $std/typedarray/forEachCallCount
+  i32.const 3
   i32.ne
   if
    i32.const 0
    i32.const 1312
-   i32.const 491
-   i32.const 5
+   i32.const 495
+   i32.const 3
    call $~lib/builtins/abort
    unreachable
   end
   local.get $2
-  global.get $std/typedarray/forEachSelf
-  i32.ne
+  i32.const 8332
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1312
-   i32.const 492
-   i32.const 5
-   call $~lib/builtins/abort
-   unreachable
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  global.get $std/typedarray/forEachCallCount
-  i32.const 1
-  i32.add
-  global.set $std/typedarray/forEachCallCount
  )
- (func $~lib/typedarray/Int8Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int8Array,i8> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -8270,12 +11465,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Int8Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Int8Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -8291,7 +11486,7 @@
     i32.const 24
     i32.shr_s
     call $~lib/typedarray/Int8Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -8309,8 +11504,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Int8Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int8Array,i8>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -8348,12 +11551,14 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 4
   i32.const 8
-  call $~lib/typedarray/Int8Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Int8Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int8Array,i8>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Int8Array#__get
@@ -8406,16 +11611,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint8Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Uint8Array,u8> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -8465,7 +11698,7 @@
   end
   local.get $3
  )
- (func $~lib/typedarray/Uint8Array#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -8499,9 +11732,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -8537,12 +11773,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Uint8Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Uint8Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -8556,7 +11792,7 @@
     i32.const 255
     i32.and
     call $~lib/typedarray/Uint8Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -8572,8 +11808,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Uint8Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint8Array,u8>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -8609,11 +11853,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Uint8Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Uint8Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint8Array,u8>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Uint8Array#__get
@@ -8666,16 +11912,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint8ClampedArray#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -8709,9 +11983,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -8747,12 +12024,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Uint8ClampedArray#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Uint8ClampedArray#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -8766,7 +12043,7 @@
     i32.const 255
     i32.and
     call $~lib/typedarray/Uint8ClampedArray#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -8782,8 +12059,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Uint8Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint8Array,u8>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -8819,11 +12104,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Uint8ClampedArray#subarray
-  local.tee $1
-  call $~lib/typedarray/Uint8Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint8Array,u8>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Uint8ClampedArray#__get
@@ -8876,16 +12163,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int16Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int16Array,i16> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -8941,7 +12256,7 @@
   end
   local.get $3
  )
- (func $~lib/typedarray/Int16Array#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -8977,9 +12292,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -9019,12 +12337,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -9040,7 +12358,7 @@
     i32.const 16
     i32.shr_s
     call $~lib/typedarray/Int16Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -9058,8 +12376,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Int16Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int16Array,i16>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -9097,11 +12423,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Int16Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Int16Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int16Array,i16>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Int16Array#__get
@@ -9154,16 +12482,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint16Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Uint16Array,u16> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -9219,7 +12575,7 @@
   end
   local.get $3
  )
- (func $~lib/typedarray/Uint16Array#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -9255,9 +12611,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -9297,12 +12656,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Uint16Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Uint16Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -9316,7 +12675,7 @@
     i32.const 65535
     i32.and
     call $~lib/typedarray/Uint16Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -9332,8 +12691,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Uint16Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint16Array,u16>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -9369,11 +12736,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Uint16Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Uint16Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint16Array,u16>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Uint16Array#__get
@@ -9426,16 +12795,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int32Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int32Array,i32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -9502,12 +12899,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Int32Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Int32Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -9519,7 +12916,7 @@
     local.get $0
     call $~lib/array/Array<i32>#__get
     call $~lib/typedarray/Int32Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -9533,8 +12930,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Int32Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -9568,12 +12973,14 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 4
   i32.const 8
-  call $~lib/typedarray/Int32Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Int32Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int32Array,i32>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Int32Array#__get
@@ -9626,16 +13033,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint32Array#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -9671,9 +13106,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 9
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -9713,12 +13151,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Uint32Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Uint32Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -9730,7 +13168,7 @@
     local.get $0
     call $~lib/array/Array<i32>#__get
     call $~lib/typedarray/Uint32Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -9744,8 +13182,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Int32Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -9779,11 +13225,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Uint32Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Int32Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int32Array,i32>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Uint32Array#__get
@@ -9836,16 +13284,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int64Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int64Array,i64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -9901,7 +13377,7 @@
   end
   local.get $3
  )
- (func $~lib/typedarray/Int64Array#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -9937,9 +13413,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 10
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -9979,12 +13458,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -9997,7 +13476,7 @@
     call $~lib/array/Array<i32>#__get
     i64.extend_i32_s
     call $~lib/typedarray/Int64Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -10011,9 +13490,17 @@
     br $for-loop|0
    end
   end
-  local.get $2
-  call $~lib/typedarray/Int64Array#reverse
-  call $~lib/rt/pure/__release
+  local.get $2
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int64Array,i64>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -10048,11 +13535,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Int64Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Int64Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int64Array,i64>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Int64Array#__get
@@ -10105,16 +13594,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Uint64Array#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -10150,9 +13667,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 11
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -10192,12 +13712,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Uint64Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Uint64Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -10210,7 +13730,7 @@
     call $~lib/array/Array<i32>#__get
     i64.extend_i32_s
     call $~lib/typedarray/Uint64Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -10225,8 +13745,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Int64Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int64Array,i64>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -10261,11 +13789,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Uint64Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Int64Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int64Array,i64>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Uint64Array#__get
@@ -10318,16 +13848,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Float32Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Float32Array,f32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10383,7 +13941,7 @@
   end
   local.get $3
  )
- (func $~lib/typedarray/Float32Array#subarray (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   i32.const 4
@@ -10419,9 +13977,12 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 12
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   i32.load
@@ -10461,12 +14022,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Float32Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Float32Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -10479,7 +14040,7 @@
     call $~lib/array/Array<i32>#__get
     f32.convert_i32_s
     call $~lib/typedarray/Float32Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -10494,8 +14055,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Float32Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Float32Array,f32>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -10530,11 +14099,13 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 8
-  call $~lib/typedarray/Float32Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Float32Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Float32Array,f32>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Float32Array#__get
@@ -10587,16 +14158,44 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Float64Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Float64Array,f64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -10663,12 +14262,12 @@
   i32.load
   local.tee $1
   call $~lib/typedarray/Float64Array#constructor
-  local.tee $4
+  local.tee $3
   local.set $2
   local.get $1
   call $~lib/typedarray/Float64Array#constructor
-  local.tee $5
-  local.set $3
+  local.tee $4
+  local.set $5
   loop $for-loop|0
    local.get $0
    local.get $1
@@ -10681,7 +14280,7 @@
     call $~lib/array/Array<i32>#__get
     f64.convert_i32_s
     call $~lib/typedarray/Float64Array#__set
-    local.get $3
+    local.get $5
     local.get $0
     i32.const 2800
     local.get $0
@@ -10696,8 +14295,16 @@
    end
   end
   local.get $2
-  call $~lib/typedarray/Float64Array#reverse
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Float64Array,f64>
+  local.tee $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 0
   local.set $0
   loop $for-loop|1
@@ -10732,12 +14339,14 @@
     br $for-loop|1
    end
   end
-  local.get $3
+  local.get $5
   i32.const 4
   i32.const 8
-  call $~lib/typedarray/Float64Array#subarray
-  local.tee $1
-  call $~lib/typedarray/Float64Array#reverse
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Float64Array,f64>
+  local.tee $0
+  local.set $1
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Float64Array,f64>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Float64Array#__get
@@ -10790,18 +14399,46 @@
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/typedarray/Int8Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
+  block $__inlined_func$~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>
    local.get $0
    i32.load offset=8
    local.tee $3
@@ -10815,7 +14452,7 @@
    if
     i32.const -1
     local.set $2
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
+    br $__inlined_func$~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>
    end
    local.get $2
    i32.const 0
@@ -10848,7 +14485,7 @@
      i32.const 255
      i32.and
      i32.eq
-     br_if $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
+     br_if $__inlined_func$~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>
      local.get $2
      i32.const 1
      i32.add
@@ -10863,37 +14500,38 @@
  )
  (func $~lib/typedarray/Int8Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
+  block $__inlined_func$~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>
    local.get $0
-   i32.load offset=8
    local.tee $3
+   i32.load offset=8
+   local.tee $0
    i32.eqz
    if
     i32.const -1
-    local.set $2
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
+    local.set $0
+    br $__inlined_func$~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>
    end
+   local.get $0
    local.get $2
-   local.get $3
    i32.add
-   local.get $3
+   local.get $0
    i32.const 1
    i32.sub
    local.get $2
    local.get $2
-   local.get $3
+   local.get $0
    i32.ge_s
    select
    local.get $2
    i32.const 0
    i32.lt_s
    select
-   local.set $2
-   local.get $0
-   i32.load offset=4
    local.set $0
+   local.get $3
+   i32.load offset=4
+   local.set $2
    loop $while-continue|0
-    local.get $2
+    local.get $0
     i32.const 0
     i32.ge_s
     if
@@ -10905,18 +14543,18 @@
      i32.const 255
      i32.and
      i32.eq
-     br_if $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
-     local.get $2
+     br_if $__inlined_func$~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>
+     local.get $0
      i32.const 1
      i32.sub
-     local.set $2
+     local.set $0
      br $while-continue|0
     end
    end
    i32.const -1
-   local.set $2
+   local.set $0
   end
-  local.get $2
+  local.get $0
  )
  (func $~lib/typedarray/Int8Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -10943,18 +14581,16 @@
   (local $0 i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  i32.const 2908
-  i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Int8Array#constructor
+  (local $3 i32)
+  i32.const 2908
+  i32.load
   local.tee $3
+  call $~lib/typedarray/Int8Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -11243,7 +14879,7 @@
   local.get $0
   i32.const 4
   i32.const 9
-  call $~lib/typedarray/Int8Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8>
   local.tee $0
   i32.const 3
   i32.const 0
@@ -11354,10 +14990,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
@@ -11366,15 +15016,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Uint8Array#constructor
   local.tee $3
+  call $~lib/typedarray/Uint8Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -11660,7 +15308,7 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Uint8Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8>
   local.tee $0
   i32.const 3
   i32.const 0
@@ -11771,10 +15419,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
@@ -11783,15 +15445,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Uint8ClampedArray#constructor
   local.tee $3
+  call $~lib/typedarray/Uint8ClampedArray#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -12077,7 +15737,7 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Uint8ClampedArray#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8>
   local.tee $0
   i32.const 3
   i32.const 0
@@ -12188,137 +15848,147 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int16Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
-   local.get $0
-   i32.load offset=8
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.tee $3
+  if (result i32)
+   local.get $2
+   local.get $3
+   i32.ge_s
+  else
    i32.const 1
-   i32.shr_u
-   local.tee $3
-   if (result i32)
-    local.get $2
-    local.get $3
-    i32.ge_s
-   else
-    i32.const 1
-   end
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
-   end
+  end
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $2
+   local.get $3
+   i32.add
+   local.tee $2
+   i32.const 0
    local.get $2
    i32.const 0
+   i32.gt_s
+   select
+   local.set $2
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
+   local.get $2
+   local.get $3
    i32.lt_s
    if
+    local.get $0
     local.get $2
-    local.get $3
+    i32.const 1
+    i32.shl
     i32.add
-    local.tee $2
-    i32.const 0
-    local.get $2
-    i32.const 0
-    i32.gt_s
-    select
-    local.set $2
-   end
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
-    local.get $2
-    local.get $3
-    i32.lt_s
+    i32.load16_u
+    local.get $1
+    i32.const 65535
+    i32.and
+    i32.eq
     if
-     local.get $0
-     local.get $2
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     local.get $1
-     i32.const 65535
-     i32.and
-     i32.eq
-     br_if $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
      local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
- (func $~lib/typedarray/Int16Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 1
-   i32.shr_u
-   local.tee $3
-   i32.eqz
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
-   end
-   local.get $2
-   local.get $3
-   i32.add
-   local.get $3
-   i32.const 1
-   i32.sub
-   local.get $2
-   local.get $2
-   local.get $3
-   i32.ge_s
-   select
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  local.tee $3
+  i32.eqz
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $3
+  i32.const 1
+  i32.sub
+  local.get $2
+  local.get $2
+  local.get $3
+  i32.ge_s
+  select
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  select
+  local.set $2
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
    local.get $2
    i32.const 0
-   i32.lt_s
-   select
-   local.set $2
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
+   i32.ge_s
+   if
+    local.get $0
     local.get $2
-    i32.const 0
-    i32.ge_s
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.get $1
+    i32.const 65535
+    i32.and
+    i32.eq
     if
-     local.get $0
-     local.get $2
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     local.get $1
-     i32.const 65535
-     i32.and
-     i32.eq
-     br_if $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
      local.get $2
-     i32.const 1
-     i32.sub
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.sub
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
  (func $~lib/typedarray/Int16Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -12341,7 +16011,7 @@
   local.get $0
   local.get $1
   local.get $2
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
@@ -12350,15 +16020,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Int16Array#constructor
   local.tee $3
+  call $~lib/typedarray/Int16Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -12381,7 +16049,7 @@
   local.get $0
   i32.const 0
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   if
    i32.const 0
    i32.const 1312
@@ -12393,7 +16061,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12407,7 +16075,7 @@
   local.get $0
   i32.const -1
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12421,7 +16089,7 @@
   local.get $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12435,7 +16103,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12449,7 +16117,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12463,7 +16131,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12477,7 +16145,7 @@
   local.get $0
   i32.const 1
   i32.const 10
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12491,7 +16159,7 @@
   local.get $0
   i32.const 1
   i32.const -100
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -12563,7 +16231,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12577,7 +16245,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12591,7 +16259,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12605,7 +16273,7 @@
   local.get $0
   i32.const 1
   i32.const 100
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -12619,7 +16287,7 @@
   local.get $0
   i32.const 1
   i32.const -10
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -12633,7 +16301,7 @@
   local.get $0
   i32.const 1
   i32.const -11
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12646,11 +16314,11 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Int16Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16>
   local.tee $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12664,7 +16332,7 @@
   local.get $0
   i32.const 4
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   if
    i32.const 0
    i32.const 1312
@@ -12676,7 +16344,7 @@
   local.get $0
   i32.const 5
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -12690,7 +16358,7 @@
   local.get $0
   i32.const 9
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12704,7 +16372,7 @@
   local.get $0
   i32.const 10
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12718,7 +16386,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12732,7 +16400,7 @@
   local.get $0
   i32.const 5
   i32.const 1
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -12746,7 +16414,7 @@
   local.get $0
   i32.const 5
   i32.const 2
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12757,10 +16425,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
@@ -12769,15 +16451,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Uint16Array#constructor
   local.tee $3
+  call $~lib/typedarray/Uint16Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -12798,7 +16478,7 @@
   local.get $0
   i32.const 0
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   if
    i32.const 0
    i32.const 1312
@@ -12810,7 +16490,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12824,7 +16504,7 @@
   local.get $0
   i32.const -1
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12838,7 +16518,7 @@
   local.get $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12852,7 +16532,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12866,7 +16546,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12880,7 +16560,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12894,7 +16574,7 @@
   local.get $0
   i32.const 1
   i32.const 10
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -12908,7 +16588,7 @@
   local.get $0
   i32.const 1
   i32.const -100
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -12980,7 +16660,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -12994,7 +16674,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 3
   i32.ne
   if
@@ -13008,7 +16688,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -13022,7 +16702,7 @@
   local.get $0
   i32.const 1
   i32.const 100
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -13036,7 +16716,7 @@
   local.get $0
   i32.const 1
   i32.const -10
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -13050,7 +16730,7 @@
   local.get $0
   i32.const 1
   i32.const -11
-  call $~lib/typedarray/Int16Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -13063,11 +16743,11 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Uint16Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16>
   local.tee $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -13081,7 +16761,7 @@
   local.get $0
   i32.const 4
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   if
    i32.const 0
    i32.const 1312
@@ -13093,7 +16773,7 @@
   local.get $0
   i32.const 5
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -13107,7 +16787,7 @@
   local.get $0
   i32.const 9
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -13121,7 +16801,7 @@
   local.get $0
   i32.const 10
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -13135,7 +16815,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -13149,7 +16829,7 @@
   local.get $0
   i32.const 5
   i32.const 1
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const 1
   i32.ne
   if
@@ -13163,7 +16843,7 @@
   local.get $0
   i32.const 5
   i32.const 2
-  call $~lib/typedarray/Int16Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
   i32.const -1
   i32.ne
   if
@@ -13174,133 +16854,143 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int32Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 2
-   i32.shr_u
-   local.tee $3
-   if (result i32)
-    local.get $2
-    local.get $3
-    i32.ge_s
-   else
-    i32.const 1
-   end
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
-   end
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.tee $3
+  if (result i32)
+   local.get $2
+   local.get $3
+   i32.ge_s
+  else
+   i32.const 1
+  end
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $2
+   local.get $3
+   i32.add
+   local.tee $2
+   i32.const 0
    local.get $2
    i32.const 0
+   i32.gt_s
+   select
+   local.set $2
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
+   local.get $2
+   local.get $3
    i32.lt_s
    if
+    local.get $1
+    local.get $0
     local.get $2
-    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.tee $2
-    i32.const 0
-    local.get $2
-    i32.const 0
-    i32.gt_s
-    select
-    local.set $2
-   end
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
-    local.get $2
-    local.get $3
-    i32.lt_s
+    i32.load
+    i32.eq
     if
-     local.get $1
-     local.get $0
-     local.get $2
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     i32.eq
-     br_if $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
      local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
- (func $~lib/typedarray/Int32Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 2
-   i32.shr_u
-   local.tee $3
-   i32.eqz
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
-   end
-   local.get $2
-   local.get $3
-   i32.add
-   local.get $3
-   i32.const 1
-   i32.sub
-   local.get $2
-   local.get $2
-   local.get $3
-   i32.ge_s
-   select
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.tee $3
+  i32.eqz
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $3
+  i32.const 1
+  i32.sub
+  local.get $2
+  local.get $2
+  local.get $3
+  i32.ge_s
+  select
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  select
+  local.set $2
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
    local.get $2
    i32.const 0
-   i32.lt_s
-   select
-   local.set $2
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
+   i32.ge_s
+   if
+    local.get $1
+    local.get $0
     local.get $2
-    i32.const 0
-    i32.ge_s
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    i32.eq
     if
-     local.get $1
-     local.get $0
-     local.get $2
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     i32.eq
-     br_if $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
      local.get $2
-     i32.const 1
-     i32.sub
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.sub
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
  (func $~lib/typedarray/Int32Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -13323,7 +17013,7 @@
   local.get $0
   local.get $1
   local.get $2
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
@@ -13332,15 +17022,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Int32Array#constructor
   local.tee $3
+  call $~lib/typedarray/Int32Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -13359,7 +17047,7 @@
   local.get $0
   i32.const 0
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   if
    i32.const 0
    i32.const 1312
@@ -13371,7 +17059,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13385,7 +17073,7 @@
   local.get $0
   i32.const -1
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13399,7 +17087,7 @@
   local.get $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13413,7 +17101,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13427,7 +17115,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13441,7 +17129,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13455,7 +17143,7 @@
   local.get $0
   i32.const 1
   i32.const 10
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13469,7 +17157,7 @@
   local.get $0
   i32.const 1
   i32.const -100
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -13541,7 +17229,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13555,7 +17243,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13569,7 +17257,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13583,7 +17271,7 @@
   local.get $0
   i32.const 1
   i32.const 100
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -13597,7 +17285,7 @@
   local.get $0
   i32.const 1
   i32.const -10
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -13611,7 +17299,7 @@
   local.get $0
   i32.const 1
   i32.const -11
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13625,11 +17313,11 @@
   local.get $0
   i32.const 4
   i32.const 9
-  call $~lib/typedarray/Int32Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32>
   local.tee $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13643,7 +17331,7 @@
   local.get $0
   i32.const 4
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   if
    i32.const 0
    i32.const 1312
@@ -13655,7 +17343,7 @@
   local.get $0
   i32.const 5
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -13669,7 +17357,7 @@
   local.get $0
   i32.const 9
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13683,7 +17371,7 @@
   local.get $0
   i32.const 10
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13697,7 +17385,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13711,7 +17399,7 @@
   local.get $0
   i32.const 5
   i32.const 1
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -13725,7 +17413,7 @@
   local.get $0
   i32.const 5
   i32.const 2
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13736,10 +17424,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
@@ -13748,15 +17450,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Uint32Array#constructor
   local.tee $3
+  call $~lib/typedarray/Uint32Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -13775,7 +17475,7 @@
   local.get $0
   i32.const 0
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   if
    i32.const 0
    i32.const 1312
@@ -13787,7 +17487,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13801,7 +17501,7 @@
   local.get $0
   i32.const -1
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13815,7 +17515,7 @@
   local.get $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13829,7 +17529,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13843,7 +17543,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13857,7 +17557,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13871,7 +17571,7 @@
   local.get $0
   i32.const 1
   i32.const 10
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13885,7 +17585,7 @@
   local.get $0
   i32.const 1
   i32.const -100
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -13957,7 +17657,7 @@
   local.get $0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13971,7 +17671,7 @@
   local.get $0
   i32.const 3
   i32.const 3
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 3
   i32.ne
   if
@@ -13985,7 +17685,7 @@
   local.get $0
   i32.const 3
   i32.const 2
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -13999,7 +17699,7 @@
   local.get $0
   i32.const 1
   i32.const 100
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -14013,7 +17713,7 @@
   local.get $0
   i32.const 1
   i32.const -10
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -14027,7 +17727,7 @@
   local.get $0
   i32.const 1
   i32.const -11
-  call $~lib/typedarray/Int32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -14040,11 +17740,11 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Uint32Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32>
   local.tee $0
   i32.const 3
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -14058,7 +17758,7 @@
   local.get $0
   i32.const 4
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   if
    i32.const 0
    i32.const 1312
@@ -14070,7 +17770,7 @@
   local.get $0
   i32.const 5
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -14084,7 +17784,7 @@
   local.get $0
   i32.const 9
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -14098,7 +17798,7 @@
   local.get $0
   i32.const 10
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -14112,7 +17812,7 @@
   local.get $0
   i32.const 11
   i32.const 0
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -14126,7 +17826,7 @@
   local.get $0
   i32.const 5
   i32.const 1
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const 1
   i32.ne
   if
@@ -14140,7 +17840,7 @@
   local.get $0
   i32.const 5
   i32.const 2
-  call $~lib/typedarray/Int32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
   i32.const -1
   i32.ne
   if
@@ -14151,133 +17851,143 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Int64Array#indexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 3
-   i32.shr_u
-   local.tee $3
-   if (result i32)
-    local.get $2
-    local.get $3
-    i32.ge_s
-   else
-    i32.const 1
-   end
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
-   end
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.tee $3
+  if (result i32)
+   local.get $2
+   local.get $3
+   i32.ge_s
+  else
+   i32.const 1
+  end
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $2
+   local.get $3
+   i32.add
+   local.tee $2
+   i32.const 0
    local.get $2
    i32.const 0
+   i32.gt_s
+   select
+   local.set $2
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
+   local.get $2
+   local.get $3
    i32.lt_s
    if
+    local.get $1
+    local.get $0
     local.get $2
-    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.tee $2
-    i32.const 0
-    local.get $2
-    i32.const 0
-    i32.gt_s
-    select
-    local.set $2
-   end
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
-    local.get $2
-    local.get $3
-    i32.lt_s
+    i64.load
+    i64.eq
     if
-     local.get $1
-     local.get $0
-     local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     i64.eq
-     br_if $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
      local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
- (func $~lib/typedarray/Int64Array#lastIndexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 3
-   i32.shr_u
-   local.tee $3
-   i32.eqz
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
-   end
-   local.get $2
-   local.get $3
-   i32.add
-   local.get $3
-   i32.const 1
-   i32.sub
-   local.get $2
-   local.get $2
-   local.get $3
-   i32.ge_s
-   select
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.tee $3
+  i32.eqz
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $3
+  i32.const 1
+  i32.sub
+  local.get $2
+  local.get $2
+  local.get $3
+  i32.ge_s
+  select
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  select
+  local.set $2
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
    local.get $2
    i32.const 0
-   i32.lt_s
-   select
-   local.set $2
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
+   i32.ge_s
+   if
+    local.get $1
+    local.get $0
     local.get $2
-    i32.const 0
-    i32.ge_s
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    i64.eq
     if
-     local.get $1
-     local.get $0
-     local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     i64.eq
-     br_if $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
      local.get $2
-     i32.const 1
-     i32.sub
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.sub
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
  (func $~lib/typedarray/Int64Array#lastIndexOf@varargs (param $0 i32) (param $1 i64) (result i32)
   (local $2 i32)
@@ -14300,7 +18010,7 @@
   local.get $0
   local.get $1
   local.get $2
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
@@ -14309,15 +18019,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Int64Array#constructor
   local.tee $3
+  call $~lib/typedarray/Int64Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -14337,7 +18045,7 @@
   local.get $0
   i64.const 0
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   if
    i32.const 0
    i32.const 1312
@@ -14349,7 +18057,7 @@
   local.get $0
   i64.const 11
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14363,7 +18071,7 @@
   local.get $0
   i64.const -1
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14377,7 +18085,7 @@
   local.get $0
   i64.const 3
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14391,7 +18099,7 @@
   local.get $0
   i64.const 3
   i32.const 2
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14405,7 +18113,7 @@
   local.get $0
   i64.const 3
   i32.const 3
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14419,7 +18127,7 @@
   local.get $0
   i64.const 3
   i32.const 4
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14433,7 +18141,7 @@
   local.get $0
   i64.const 1
   i32.const 10
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14447,7 +18155,7 @@
   local.get $0
   i64.const 1
   i32.const -100
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -14519,7 +18227,7 @@
   local.get $0
   i64.const 3
   i32.const 4
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14533,7 +18241,7 @@
   local.get $0
   i64.const 3
   i32.const 3
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14547,7 +18255,7 @@
   local.get $0
   i64.const 3
   i32.const 2
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14561,7 +18269,7 @@
   local.get $0
   i64.const 1
   i32.const 100
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -14575,7 +18283,7 @@
   local.get $0
   i64.const 1
   i32.const -10
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -14589,7 +18297,7 @@
   local.get $0
   i64.const 1
   i32.const -11
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14602,11 +18310,11 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Int64Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64>
   local.tee $0
   i64.const 3
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14620,7 +18328,7 @@
   local.get $0
   i64.const 4
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   if
    i32.const 0
    i32.const 1312
@@ -14632,7 +18340,7 @@
   local.get $0
   i64.const 5
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -14646,7 +18354,7 @@
   local.get $0
   i64.const 9
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14660,7 +18368,7 @@
   local.get $0
   i64.const 10
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14674,7 +18382,7 @@
   local.get $0
   i64.const 11
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14688,7 +18396,7 @@
   local.get $0
   i64.const 5
   i32.const 1
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -14702,7 +18410,7 @@
   local.get $0
   i64.const 5
   i32.const 2
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14713,10 +18421,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
@@ -14725,15 +18447,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Uint64Array#constructor
   local.tee $3
+  call $~lib/typedarray/Uint64Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -14753,7 +18473,7 @@
   local.get $0
   i64.const 0
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   if
    i32.const 0
    i32.const 1312
@@ -14765,7 +18485,7 @@
   local.get $0
   i64.const 11
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14779,7 +18499,7 @@
   local.get $0
   i64.const -1
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14793,7 +18513,7 @@
   local.get $0
   i64.const 3
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14807,7 +18527,7 @@
   local.get $0
   i64.const 3
   i32.const 2
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14821,7 +18541,7 @@
   local.get $0
   i64.const 3
   i32.const 3
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14835,7 +18555,7 @@
   local.get $0
   i64.const 3
   i32.const 4
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14849,7 +18569,7 @@
   local.get $0
   i64.const 1
   i32.const 10
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14863,7 +18583,7 @@
   local.get $0
   i64.const 1
   i32.const -100
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -14935,7 +18655,7 @@
   local.get $0
   i64.const 3
   i32.const 4
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14949,7 +18669,7 @@
   local.get $0
   i64.const 3
   i32.const 3
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 3
   i32.ne
   if
@@ -14963,7 +18683,7 @@
   local.get $0
   i64.const 3
   i32.const 2
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -14977,7 +18697,7 @@
   local.get $0
   i64.const 1
   i32.const 100
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -14991,7 +18711,7 @@
   local.get $0
   i64.const 1
   i32.const -10
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -15005,7 +18725,7 @@
   local.get $0
   i64.const 1
   i32.const -11
-  call $~lib/typedarray/Int64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -15018,11 +18738,11 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Uint64Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64>
   local.tee $0
   i64.const 3
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -15036,7 +18756,7 @@
   local.get $0
   i64.const 4
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   if
    i32.const 0
    i32.const 1312
@@ -15048,7 +18768,7 @@
   local.get $0
   i64.const 5
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -15062,7 +18782,7 @@
   local.get $0
   i64.const 9
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -15076,7 +18796,7 @@
   local.get $0
   i64.const 10
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -15090,7 +18810,7 @@
   local.get $0
   i64.const 11
   i32.const 0
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -15104,7 +18824,7 @@
   local.get $0
   i64.const 5
   i32.const 1
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const 1
   i32.ne
   if
@@ -15118,7 +18838,7 @@
   local.get $0
   i64.const 5
   i32.const 2
-  call $~lib/typedarray/Int64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
   i32.const -1
   i32.ne
   if
@@ -15129,133 +18849,143 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/typedarray/Float32Array#indexOf (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 2
-   i32.shr_u
-   local.tee $3
-   if (result i32)
-    local.get $2
-    local.get $3
-    i32.ge_s
-   else
-    i32.const 1
-   end
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-   end
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.tee $3
+  if (result i32)
+   local.get $2
+   local.get $3
+   i32.ge_s
+  else
+   i32.const 1
+  end
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $2
+   local.get $3
+   i32.add
+   local.tee $2
+   i32.const 0
    local.get $2
    i32.const 0
+   i32.gt_s
+   select
+   local.set $2
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
+   local.get $2
+   local.get $3
    i32.lt_s
    if
+    local.get $0
     local.get $2
-    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.tee $2
-    i32.const 0
-    local.get $2
-    i32.const 0
-    i32.gt_s
-    select
-    local.set $2
-   end
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
-    local.get $2
-    local.get $3
-    i32.lt_s
+    f32.load
+    local.get $1
+    f32.eq
     if
-     local.get $0
-     local.get $2
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     local.get $1
-     f32.eq
-     br_if $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
      local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
- (func $~lib/typedarray/Float32Array#lastIndexOf (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 2
-   i32.shr_u
-   local.tee $3
-   i32.eqz
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-   end
-   local.get $2
-   local.get $3
-   i32.add
-   local.get $3
-   i32.const 1
-   i32.sub
-   local.get $2
-   local.get $2
-   local.get $3
-   i32.ge_s
-   select
+  local.get $0
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  local.tee $3
+  i32.eqz
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $3
+  i32.const 1
+  i32.sub
+  local.get $2
+  local.get $2
+  local.get $3
+  i32.ge_s
+  select
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  select
+  local.set $2
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
    local.get $2
    i32.const 0
-   i32.lt_s
-   select
-   local.set $2
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
+   i32.ge_s
+   if
+    local.get $0
     local.get $2
-    i32.const 0
-    i32.ge_s
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    local.get $1
+    f32.eq
     if
-     local.get $0
      local.get $2
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     local.get $1
-     f32.eq
-     br_if $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.sub
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.sub
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
  (func $~lib/typedarray/Float32Array#lastIndexOf@varargs (param $0 i32) (param $1 f32) (result i32)
   (local $2 i32)
@@ -15278,7 +19008,7 @@
   local.get $0
   local.get $1
   local.get $2
-  call $~lib/typedarray/Float32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
@@ -15287,15 +19017,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Float32Array#constructor
   local.tee $3
+  call $~lib/typedarray/Float32Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -15315,7 +19043,7 @@
   local.get $0
   f32.const 0
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   if
    i32.const 0
    i32.const 1312
@@ -15327,7 +19055,7 @@
   local.get $0
   f32.const 11
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15341,7 +19069,7 @@
   local.get $0
   f32.const -1
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15355,7 +19083,7 @@
   local.get $0
   f32.const 3
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 3
   i32.ne
   if
@@ -15369,7 +19097,7 @@
   local.get $0
   f32.const 3
   i32.const 2
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 3
   i32.ne
   if
@@ -15383,7 +19111,7 @@
   local.get $0
   f32.const 3
   i32.const 3
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 3
   i32.ne
   if
@@ -15397,7 +19125,7 @@
   local.get $0
   f32.const 3
   i32.const 4
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15411,7 +19139,7 @@
   local.get $0
   f32.const 1
   i32.const 10
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15425,7 +19153,7 @@
   local.get $0
   f32.const 1
   i32.const -100
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 1
   i32.ne
   if
@@ -15497,7 +19225,7 @@
   local.get $0
   f32.const 3
   i32.const 4
-  call $~lib/typedarray/Float32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 3
   i32.ne
   if
@@ -15511,7 +19239,7 @@
   local.get $0
   f32.const 3
   i32.const 3
-  call $~lib/typedarray/Float32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 3
   i32.ne
   if
@@ -15525,7 +19253,7 @@
   local.get $0
   f32.const 3
   i32.const 2
-  call $~lib/typedarray/Float32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15539,7 +19267,7 @@
   local.get $0
   f32.const 1
   i32.const 100
-  call $~lib/typedarray/Float32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 1
   i32.ne
   if
@@ -15553,7 +19281,7 @@
   local.get $0
   f32.const 1
   i32.const -10
-  call $~lib/typedarray/Float32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 1
   i32.ne
   if
@@ -15567,7 +19295,7 @@
   local.get $0
   f32.const 1
   i32.const -11
-  call $~lib/typedarray/Float32Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15580,11 +19308,11 @@
   end
   local.get $0
   i32.const 9
-  call $~lib/typedarray/Float32Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32>
   local.tee $0
   f32.const 3
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15598,7 +19326,7 @@
   local.get $0
   f32.const 4
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   if
    i32.const 0
    i32.const 1312
@@ -15610,7 +19338,7 @@
   local.get $0
   f32.const 5
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 1
   i32.ne
   if
@@ -15624,7 +19352,7 @@
   local.get $0
   f32.const 9
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15638,7 +19366,7 @@
   local.get $0
   f32.const 10
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15652,7 +19380,7 @@
   local.get $0
   f32.const 11
   i32.const 0
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
@@ -15666,7 +19394,7 @@
   local.get $0
   f32.const 5
   i32.const 1
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const 1
   i32.ne
   if
@@ -15680,144 +19408,154 @@
   local.get $0
   f32.const 5
   i32.const 2
-  call $~lib/typedarray/Float32Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
   i32.const -1
   i32.ne
   if
    i32.const 0
-   i32.const 1312
-   i32.const 587
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   i32.const 1312
+   i32.const 587
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.tee $3
+  if (result i32)
+   local.get $2
+   local.get $3
+   i32.ge_s
+  else
+   i32.const 1
+  end
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $2
+   local.get $3
+   i32.add
+   local.tee $2
+   i32.const 0
+   local.get $2
+   i32.const 0
+   i32.gt_s
+   select
+   local.set $2
   end
-  local.get $3
-  call $~lib/rt/pure/__release
   local.get $0
-  call $~lib/rt/pure/__release
- )
- (func $~lib/typedarray/Float64Array#indexOf (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
-  (local $3 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 3
-   i32.shr_u
-   local.tee $3
-   if (result i32)
-    local.get $2
-    local.get $3
-    i32.ge_s
-   else
-    i32.const 1
-   end
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-   end
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
    local.get $2
-   i32.const 0
+   local.get $3
    i32.lt_s
    if
+    local.get $0
     local.get $2
-    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.tee $2
-    i32.const 0
-    local.get $2
-    i32.const 0
-    i32.gt_s
-    select
-    local.set $2
-   end
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
-    local.get $2
-    local.get $3
-    i32.lt_s
+    f64.load
+    local.get $1
+    f64.eq
     if
-     local.get $0
      local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     local.get $1
-     f64.eq
-     br_if $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-     local.get $2
-     i32.const 1
-     i32.add
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.add
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
- (func $~lib/typedarray/Float64Array#lastIndexOf (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-   local.get $0
-   i32.load offset=8
-   i32.const 3
-   i32.shr_u
-   local.tee $3
-   i32.eqz
-   if
-    i32.const -1
-    local.set $2
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-   end
-   local.get $2
-   local.get $3
-   i32.add
-   local.get $3
-   i32.const 1
-   i32.sub
-   local.get $2
-   local.get $2
-   local.get $3
-   i32.ge_s
-   select
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  local.tee $3
+  i32.eqz
+  if
+   i32.const -1
+   return
+  end
+  local.get $2
+  local.get $3
+  i32.add
+  local.get $3
+  i32.const 1
+  i32.sub
+  local.get $2
+  local.get $2
+  local.get $3
+  i32.ge_s
+  select
+  local.get $2
+  i32.const 0
+  i32.lt_s
+  select
+  local.set $2
+  local.get $0
+  i32.load offset=4
+  local.set $0
+  loop $while-continue|0
    local.get $2
    i32.const 0
-   i32.lt_s
-   select
-   local.set $2
-   local.get $0
-   i32.load offset=4
-   local.set $0
-   loop $while-continue|0
+   i32.ge_s
+   if
+    local.get $0
     local.get $2
-    i32.const 0
-    i32.ge_s
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    local.get $1
+    f64.eq
     if
-     local.get $0
-     local.get $2
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     local.get $1
-     f64.eq
-     br_if $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
      local.get $2
-     i32.const 1
-     i32.sub
-     local.set $2
-     br $while-continue|0
+     return
     end
+    local.get $2
+    i32.const 1
+    i32.sub
+    local.set $2
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $2
   end
-  local.get $2
+  i32.const -1
  )
  (func $~lib/typedarray/Float64Array#lastIndexOf@varargs (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
@@ -15840,7 +19578,7 @@
   local.get $0
   local.get $1
   local.get $2
-  call $~lib/typedarray/Float64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
  )
  (func $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
@@ -15849,15 +19587,13 @@
   (local $3 i32)
   i32.const 2908
   i32.load
-  local.tee $0
-  local.set $2
-  local.get $0
-  call $~lib/typedarray/Float64Array#constructor
   local.tee $3
+  call $~lib/typedarray/Float64Array#constructor
+  local.tee $2
   local.set $0
   loop $for-loop|0
    local.get $1
-   local.get $2
+   local.get $3
    i32.lt_s
    if
     local.get $0
@@ -15877,7 +19613,7 @@
   local.get $0
   f64.const 0
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   if
    i32.const 0
    i32.const 1312
@@ -15889,7 +19625,7 @@
   local.get $0
   f64.const 11
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -15903,7 +19639,7 @@
   local.get $0
   f64.const -1
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -15917,7 +19653,7 @@
   local.get $0
   f64.const 3
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 3
   i32.ne
   if
@@ -15931,7 +19667,7 @@
   local.get $0
   f64.const 3
   i32.const 2
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 3
   i32.ne
   if
@@ -15945,7 +19681,7 @@
   local.get $0
   f64.const 3
   i32.const 3
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 3
   i32.ne
   if
@@ -15959,7 +19695,7 @@
   local.get $0
   f64.const 3
   i32.const 4
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -15973,7 +19709,7 @@
   local.get $0
   f64.const 1
   i32.const 10
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -15987,7 +19723,7 @@
   local.get $0
   f64.const 1
   i32.const -100
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 1
   i32.ne
   if
@@ -16059,7 +19795,7 @@
   local.get $0
   f64.const 3
   i32.const 4
-  call $~lib/typedarray/Float64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 3
   i32.ne
   if
@@ -16073,7 +19809,7 @@
   local.get $0
   f64.const 3
   i32.const 3
-  call $~lib/typedarray/Float64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 3
   i32.ne
   if
@@ -16087,7 +19823,7 @@
   local.get $0
   f64.const 3
   i32.const 2
-  call $~lib/typedarray/Float64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -16101,7 +19837,7 @@
   local.get $0
   f64.const 1
   i32.const 100
-  call $~lib/typedarray/Float64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 1
   i32.ne
   if
@@ -16115,7 +19851,7 @@
   local.get $0
   f64.const 1
   i32.const -10
-  call $~lib/typedarray/Float64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 1
   i32.ne
   if
@@ -16129,7 +19865,7 @@
   local.get $0
   f64.const 1
   i32.const -11
-  call $~lib/typedarray/Float64Array#lastIndexOf
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -16143,11 +19879,11 @@
   local.get $0
   i32.const 4
   i32.const 9
-  call $~lib/typedarray/Float64Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Float64Array,f64>
   local.tee $0
   f64.const 3
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -16161,7 +19897,7 @@
   local.get $0
   f64.const 4
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   if
    i32.const 0
    i32.const 1312
@@ -16173,7 +19909,7 @@
   local.get $0
   f64.const 5
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 1
   i32.ne
   if
@@ -16187,7 +19923,7 @@
   local.get $0
   f64.const 9
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -16201,7 +19937,7 @@
   local.get $0
   f64.const 10
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -16215,7 +19951,7 @@
   local.get $0
   f64.const 11
   i32.const 0
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -16229,7 +19965,7 @@
   local.get $0
   f64.const 5
   i32.const 1
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const 1
   i32.ne
   if
@@ -16243,7 +19979,7 @@
   local.get $0
   f64.const 5
   i32.const 2
-  call $~lib/typedarray/Float64Array#indexOf
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
   i32.const -1
   i32.ne
   if
@@ -16254,10 +19990,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
-  call $~lib/rt/pure/__release
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
   local.get $0
@@ -16301,7 +20051,7 @@
   i32.lt_u
   select
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   loop $do-continue|0
    local.get $1
@@ -16341,7 +20091,7 @@
   local.get $0
   i32.const 31
   i32.shr_u
-  local.tee $1
+  local.tee $2
   if
    i32.const 0
    local.get $0
@@ -16350,34 +20100,31 @@
   end
   local.get $0
   call $~lib/util/number/decimalCount32
-  local.get $1
+  local.get $2
   i32.add
   local.tee $3
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   local.get $0
   local.get $3
-  call $~lib/util/number/utoa_simple<u32>
-  local.get $1
+  call $~lib/util/number/utoa32_core
+  local.get $2
   if
-   local.get $2
+   local.get $1
    i32.const 45
    i32.store16
   end
-  local.get $2
+  local.get $1
   call $~lib/rt/pure/__retain
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/number/itoa_stream<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
   local.get $1
@@ -16441,7 +20188,7 @@
   local.get $0
   local.get $2
   local.get $1
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $1
  )
  (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (result i32)
@@ -16450,7 +20197,11 @@
   (local $4 i32)
   i32.const 0
   local.get $0
-  call $~lib/string/String#get:length
+  i32.const 16
+  i32.sub
+  i32.load offset=12
+  i32.const 1
+  i32.shr_u
   local.tee $2
   i32.const 0
   local.get $2
@@ -16506,15 +20257,18 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $3
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   local.get $1
   i32.add
   local.get $3
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $2
   call $~lib/rt/pure/__retain
  )
@@ -16543,8 +20297,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 11
   i32.add
@@ -16554,8 +20310,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -16584,7 +20345,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -16614,18 +20375,18 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/typedarray/Int8Array#join (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=8
-  call $~lib/util/string/joinIntegerArray<i8>
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -16719,10 +20480,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
@@ -16734,6 +20503,99 @@
   end
   i32.const 0
  )
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int8Array,i8>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const 5
+  call $~lib/typedarray/Int8Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Int8Array#__set
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load offset=8
+  call $~lib/util/string/joinIntegerArray<i8>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  call $~lib/util/string/joinIntegerArray<i8>
+  local.tee $3
+  local.set $1
+  local.get $3
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
  (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
@@ -16745,16 +20607,21 @@
   end
   local.get $0
   call $~lib/util/number/decimalCount32
-  local.tee $1
+  local.tee $2
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
   local.get $0
-  local.get $1
-  call $~lib/util/number/utoa_simple<u32>
   local.get $2
+  call $~lib/util/number/utoa32_core
+  local.get $1
   call $~lib/rt/pure/__retain
  )
  (func $~lib/util/number/itoa_stream<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -16789,7 +20656,7 @@
   local.get $0
   local.get $2
   local.get $1
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $1
  )
  (func $~lib/util/string/joinIntegerArray<u8> (param $0 i32) (param $1 i32) (result i32)
@@ -16817,8 +20684,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 10
   i32.add
@@ -16828,8 +20697,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -16858,7 +20732,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -16871,34 +20745,220 @@
     br $for-loop|0
    end
   end
-  local.get $6
+  local.get $6
+  local.get $1
+  local.get $2
+  local.get $0
+  local.get $3
+  i32.add
+  i32.load8_u
+  call $~lib/util/number/itoa_stream<u8>
+  local.get $2
+  i32.add
+  local.tee $0
+  i32.gt_s
+  if
+   local.get $1
+   local.get $0
+   call $~lib/string/String#substring
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   return
+  end
+  local.get $1
+ )
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8Array,u8>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const 5
+  call $~lib/typedarray/Uint8Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Uint8Array#__set
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load offset=8
+  call $~lib/util/string/joinIntegerArray<u8>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  call $~lib/util/string/joinIntegerArray<u8>
+  local.tee $3
+  local.set $1
+  local.get $3
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8ClampedArray,u8>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const 5
+  call $~lib/typedarray/Uint8ClampedArray#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint8ClampedArray#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint8ClampedArray#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint8ClampedArray#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Uint8ClampedArray#__set
+  local.get $0
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Uint8ClampedArray#__set
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load offset=8
+  call $~lib/util/string/joinIntegerArray<u8>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
   local.get $1
-  local.get $2
-  local.get $0
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  call $~lib/util/string/joinIntegerArray<u8>
+  local.tee $3
+  local.set $1
   local.get $3
-  i32.add
-  i32.load8_u
-  call $~lib/util/number/itoa_stream<u8>
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
   local.get $2
-  i32.add
-  local.tee $0
-  i32.gt_s
+  i32.const 8332
+  i32.gt_u
   if
-   local.get $1
-   local.get $0
-   call $~lib/string/String#substring
-   local.get $1
-   call $~lib/rt/pure/__release
-   return
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
   local.get $1
- )
- (func $~lib/typedarray/Uint8Array#join (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  i32.load offset=8
-  call $~lib/util/string/joinIntegerArray<u8>
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/number/itoa_stream<i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
@@ -16963,7 +21023,7 @@
   local.get $0
   local.get $2
   local.get $1
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $1
  )
  (func $~lib/util/string/joinIntegerArray<i16> (param $0 i32) (param $1 i32) (result i32)
@@ -16991,8 +21051,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 11
   i32.add
@@ -17002,8 +21064,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -17034,7 +21101,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -17066,12 +21133,46 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/typedarray/Int16Array#join (param $0 i32) (result i32)
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int16Array,i16>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Int16Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Int16Array#__set
+  local.get $0
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Int16Array#__set
   local.get $0
   i32.load offset=4
   local.get $0
@@ -17079,6 +21180,64 @@
   i32.const 1
   i32.shr_u
   call $~lib/util/string/joinIntegerArray<i16>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<i16>
+  local.tee $1
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/number/itoa_stream<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
@@ -17112,7 +21271,7 @@
   local.get $0
   local.get $2
   local.get $1
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $1
  )
  (func $~lib/util/string/joinIntegerArray<u16> (param $0 i32) (param $1 i32) (result i32)
@@ -17140,8 +21299,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 10
   i32.add
@@ -17151,8 +21312,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -17183,7 +21349,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -17215,19 +21381,111 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
-   return
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   return
+  end
+  local.get $1
+ )
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint16Array,u16>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Uint16Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Uint16Array#__set
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<u16>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 1
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<u16>
+  local.tee $1
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $1
- )
- (func $~lib/typedarray/Uint16Array#join (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
   local.get $0
-  i32.load offset=8
-  i32.const 1
-  i32.shr_u
-  call $~lib/util/string/joinIntegerArray<u16>
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/number/itoa_stream<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
@@ -17274,7 +21532,7 @@
   local.get $1
   i32.add
   local.tee $0
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $0
  )
  (func $~lib/util/string/joinIntegerArray<i32> (param $0 i32) (param $1 i32) (result i32)
@@ -17302,8 +21560,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 11
   i32.add
@@ -17313,8 +21573,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -17345,7 +21610,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -17377,12 +21642,46 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/typedarray/Int32Array#join (param $0 i32) (result i32)
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Int32Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Int32Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int32Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int32Array#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Int32Array#__set
+  local.get $0
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Int32Array#__set
   local.get $0
   i32.load offset=4
   local.get $0
@@ -17390,6 +21689,64 @@
   i32.const 2
   i32.shr_u
   call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.tee $1
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/number/itoa_stream<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   local.get $0
@@ -17415,7 +21772,7 @@
   local.get $2
   call $~lib/util/number/decimalCount32
   local.tee $0
-  call $~lib/util/number/utoa_simple<u32>
+  call $~lib/util/number/utoa32_core
   local.get $0
  )
  (func $~lib/util/string/joinIntegerArray<u32> (param $0 i32) (param $1 i32) (result i32)
@@ -17443,8 +21800,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 10
   i32.add
@@ -17454,8 +21813,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -17486,7 +21850,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -17518,12 +21882,46 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/typedarray/Uint32Array#join (param $0 i32) (result i32)
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint32Array,u32>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Uint32Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i32.const 1
+  call $~lib/typedarray/Uint32Array#__set
+  local.get $0
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Uint32Array#__set
+  local.get $0
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Uint32Array#__set
+  local.get $0
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Uint32Array#__set
+  local.get $0
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Uint32Array#__set
   local.get $0
   i32.load offset=4
   local.get $0
@@ -17531,6 +21929,64 @@
   i32.const 2
   i32.shr_u
   call $~lib/util/string/joinIntegerArray<u32>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<u32>
+  local.tee $1
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/number/decimalCount64High (param $0 i64) (result i32)
   local.get $0
@@ -17574,39 +22030,114 @@
   i64.lt_u
   select
   local.get $0
-  i64.const 1000000000000000
-  i64.lt_u
-  select
- )
- (func $~lib/util/number/utoa_simple<u64> (param $0 i32) (param $1 i64) (param $2 i32)
-  (local $3 i32)
-  loop $do-continue|0
-   local.get $1
-   i64.const 10
-   i64.rem_u
+  i64.const 1000000000000000
+  i64.lt_u
+  select
+ )
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
+  (local $3 i32)
+  loop $do-continue|0
+   local.get $1
+   i64.const 10
+   i64.rem_u
+   i32.wrap_i64
+   local.set $3
+   local.get $1
+   i64.const 10
+   i64.div_u
+   local.set $1
+   local.get $0
+   local.get $2
+   i32.const 1
+   i32.sub
+   local.tee $2
+   i32.const 1
+   i32.shl
+   i32.add
+   local.get $3
+   i32.const 48
+   i32.add
+   i32.store16
+   local.get $1
+   i64.const 0
+   i64.ne
+   br_if $do-continue|0
+  end
+ )
+ (func $~lib/util/number/itoa64 (param $0 i64) (result i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  i64.eqz
+  if
+   i32.const 2944
+   return
+  end
+  local.get $0
+  i64.const 63
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $2
+  if
+   i64.const 0
+   local.get $0
+   i64.sub
+   local.set $0
+  end
+  local.get $0
+  i64.const 4294967295
+  i64.le_u
+  if
+   local.get $0
    i32.wrap_i64
-   local.set $3
-   local.get $1
-   i64.const 10
-   i64.div_u
+   local.tee $3
+   call $~lib/util/number/decimalCount32
+   local.get $2
+   i32.add
+   local.tee $4
+   i32.const 1
+   i32.shl
    local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $1
+   i32.const 1
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
+   i32.add
+   local.tee $1
+   local.get $3
+   local.get $4
+   call $~lib/util/number/utoa32_core
+  else
    local.get $0
+   call $~lib/util/number/decimalCount64High
    local.get $2
-   i32.const 1
-   i32.sub
-   local.tee $2
+   i32.add
+   local.tee $3
    i32.const 1
    i32.shl
+   local.set $1
+   call $~lib/rt/tlsf/maybeInitialize
+   local.get $1
+   i32.const 1
+   call $~lib/rt/tlsf/allocateBlock
+   i32.const 16
    i32.add
+   local.tee $1
+   local.get $0
    local.get $3
-   i32.const 48
-   i32.add
-   i32.store16
+   call $~lib/util/number/utoa64_core
+  end
+  local.get $2
+  if
    local.get $1
-   i64.const 0
-   i64.ne
-   br_if $do-continue|0
+   i32.const 45
+   i32.store16
   end
+  local.get $1
+  call $~lib/rt/pure/__retain
  )
  (func $~lib/util/number/itoa_stream<i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
   (local $3 i32)
@@ -17661,7 +22192,7 @@
    local.get $1
    local.get $3
    local.get $0
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
   else
    local.get $1
    local.get $2
@@ -17670,119 +22201,66 @@
    local.get $0
    i32.add
    local.tee $0
-   call $~lib/util/number/utoa_simple<u64>
+   call $~lib/util/number/utoa64_core
   end
   local.get $0
  )
  (func $~lib/util/string/joinIntegerArray<i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
-  (local $3 i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
   local.get $1
   i32.const 1
   i32.sub
-  local.tee $4
+  local.tee $3
   i32.const 0
   i32.lt_s
   if
    i32.const 2928
    return
   end
-  local.get $4
+  local.get $3
   i32.eqz
   if
-   block $__inlined_func$~lib/util/number/itoa64 (result i32)
-    i32.const 2944
-    local.get $0
-    i64.load
-    local.tee $3
-    i64.eqz
-    br_if $__inlined_func$~lib/util/number/itoa64
-    drop
-    local.get $3
-    i64.const 63
-    i64.shr_u
-    i32.wrap_i64
-    local.tee $0
-    if
-     i64.const 0
-     local.get $3
-     i64.sub
-     local.set $3
-    end
-    local.get $3
-    i64.const 4294967295
-    i64.le_u
-    if
-     local.get $3
-     i32.wrap_i64
-     local.tee $2
-     call $~lib/util/number/decimalCount32
-     local.get $0
-     i32.add
-     local.tee $4
-     i32.const 1
-     i32.shl
-     i32.const 1
-     call $~lib/rt/tlsf/__alloc
-     local.tee $1
-     local.get $2
-     local.get $4
-     call $~lib/util/number/utoa_simple<u32>
-    else
-     local.get $3
-     call $~lib/util/number/decimalCount64High
-     local.get $0
-     i32.add
-     local.tee $2
-     i32.const 1
-     i32.shl
-     i32.const 1
-     call $~lib/rt/tlsf/__alloc
-     local.tee $1
-     local.get $3
-     local.get $2
-     call $~lib/util/number/utoa_simple<u64>
-    end
-    local.get $0
-    if
-     local.get $1
-     i32.const 45
-     i32.store16
-    end
-    local.get $1
-    call $~lib/rt/pure/__retain
-   end
+   local.get $0
+   i64.load
+   call $~lib/util/number/itoa64
    return
   end
-  local.get $4
-  i32.const 2976
-  call $~lib/string/String#get:length
-  local.tee $5
+  local.get $3
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.tee $4
   i32.const 21
   i32.add
   i32.mul
   i32.const 21
   i32.add
-  local.tee $7
+  local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
-   local.get $6
-   local.get $4
+   local.get $5
+   local.get $3
    i32.lt_s
    if
     local.get $1
     local.get $2
     local.get $0
-    local.get $6
+    local.get $5
     i32.const 3
     i32.shl
     i32.add
@@ -17791,7 +22269,7 @@
     local.get $2
     i32.add
     local.set $2
-    local.get $5
+    local.get $4
     if
      local.get $1
      local.get $2
@@ -17799,27 +22277,27 @@
      i32.shl
      i32.add
      i32.const 2976
-     local.get $5
+     local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
-     local.get $5
+     local.get $4
      i32.add
      local.set $2
     end
-    local.get $6
+    local.get $5
     i32.const 1
     i32.add
-    local.set $6
+    local.set $5
     br $for-loop|0
    end
   end
-  local.get $7
+  local.get $6
   local.get $1
   local.get $2
   local.get $0
-  local.get $4
+  local.get $3
   i32.const 3
   i32.shl
   i32.add
@@ -17832,21 +22310,113 @@
   if
    local.get $1
    local.get $0
-   call $~lib/string/String#substring
-   local.get $1
-   call $~lib/rt/pure/__release
-   return
+   call $~lib/string/String#substring
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   return
+  end
+  local.get $1
+ )
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int64Array,i64>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Int64Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i64.const 1
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.const 1
+  i64.const 2
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.const 2
+  i64.const 3
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.const 3
+  i64.const 4
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.const 4
+  i64.const 5
+  call $~lib/typedarray/Int64Array#__set
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<i64>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<i64>
+  local.tee $1
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $1
- )
- (func $~lib/typedarray/Int64Array#join (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=8
-  i32.const 3
-  i32.shr_u
-  call $~lib/util/string/joinIntegerArray<i64>
  )
  (func $~lib/util/number/itoa_stream<u64> (param $0 i32) (param $1 i32) (param $2 i64) (result i32)
   (local $3 i32)
@@ -17880,14 +22450,14 @@
    local.get $0
    local.get $3
    local.get $1
-   call $~lib/util/number/utoa_simple<u32>
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    local.get $2
    local.get $2
    call $~lib/util/number/decimalCount64High
    local.tee $1
-   call $~lib/util/number/utoa_simple<u64>
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
  )
@@ -17930,24 +22500,34 @@
      local.tee $2
      i32.const 1
      i32.shl
+     local.set $0
+     call $~lib/rt/tlsf/maybeInitialize
+     local.get $0
      i32.const 1
-     call $~lib/rt/tlsf/__alloc
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
      local.tee $0
      local.get $1
      local.get $2
-     call $~lib/util/number/utoa_simple<u32>
+     call $~lib/util/number/utoa32_core
     else
      local.get $4
      call $~lib/util/number/decimalCount64High
      local.tee $1
      i32.const 1
      i32.shl
+     local.set $0
+     call $~lib/rt/tlsf/maybeInitialize
+     local.get $0
      i32.const 1
-     call $~lib/rt/tlsf/__alloc
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
      local.tee $0
      local.get $4
      local.get $1
-     call $~lib/util/number/utoa_simple<u64>
+     call $~lib/util/number/utoa64_core
     end
     local.get $0
     call $~lib/rt/pure/__retain
@@ -17955,8 +22535,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $5
   i32.const 20
   i32.add
@@ -17966,120 +22548,318 @@
   local.tee $7
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
    local.get $6
    local.get $3
-   i32.lt_s
+   i32.lt_s
+   if
+    local.get $1
+    local.get $2
+    local.get $0
+    local.get $6
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    call $~lib/util/number/itoa_stream<u64>
+    local.get $2
+    i32.add
+    local.set $2
+    local.get $5
+    if
+     local.get $1
+     local.get $2
+     i32.const 1
+     i32.shl
+     i32.add
+     i32.const 2976
+     local.get $5
+     i32.const 1
+     i32.shl
+     call $~lib/util/memory/memmove
+     local.get $2
+     local.get $5
+     i32.add
+     local.set $2
+    end
+    local.get $6
+    i32.const 1
+    i32.add
+    local.set $6
+    br $for-loop|0
+   end
+  end
+  local.get $7
+  local.get $1
+  local.get $2
+  local.get $0
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  call $~lib/util/number/itoa_stream<u64>
+  local.get $2
+  i32.add
+  local.tee $0
+  i32.gt_s
+  if
+   local.get $1
+   local.get $0
+   call $~lib/string/String#substring
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   return
+  end
+  local.get $1
+ )
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint64Array,u64>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Uint64Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  i64.const 1
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.const 1
+  i64.const 2
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.const 2
+  i64.const 3
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.const 3
+  i64.const 4
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.const 4
+  i64.const 5
+  call $~lib/typedarray/Uint64Array#__set
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<u64>
+  local.tee $2
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  call $~lib/util/string/joinIntegerArray<u64>
+  local.tee $1
+  i32.const 3008
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
+  local.get $3
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
    if
     local.get $1
-    local.get $2
-    local.get $0
-    local.get $6
-    i32.const 3
-    i32.shl
-    i32.add
-    i64.load
-    call $~lib/util/number/itoa_stream<u64>
-    local.get $2
-    i32.add
-    local.set $2
-    local.get $5
-    if
-     local.get $1
-     local.get $2
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.const 2976
-     local.get $5
-     i32.const 1
-     i32.shl
-     call $~lib/memory/memory.copy
-     local.get $2
-     local.get $5
-     i32.add
-     local.set $2
-    end
-    local.get $6
     i32.const 1
-    i32.add
-    local.set $6
-    br $for-loop|0
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
    end
   end
-  local.get $7
-  local.get $1
-  local.get $2
   local.get $0
-  local.get $3
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  call $~lib/util/number/itoa_stream<u64>
-  local.get $2
-  i32.add
-  local.tee $0
-  i32.gt_s
-  if
-   local.get $1
-   local.get $0
-   call $~lib/string/String#substring
-   local.get $1
-   call $~lib/rt/pure/__release
-   return
-  end
   local.get $1
+  i32.store16
  )
- (func $~lib/typedarray/Uint64Array#join (param $0 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  i32.load offset=8
-  i32.const 3
-  i32.shr_u
-  call $~lib/util/string/joinIntegerArray<u64>
- )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (param $5 i32) (result i32)
+  (local $6 i32)
   (local $7 i32)
-  (local $8 i64)
+  (local $8 i32)
   (local $9 i64)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i64)
   (local $12 i64)
-  (local $13 i64)
-  local.get $3
+  local.get $2
   local.get $1
   i64.sub
   local.set $9
-  local.get $3
+  local.get $2
   i64.const 1
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
-  local.tee $10
+  local.tee $8
   i64.extend_i32_s
   i64.shl
-  local.tee $11
+  local.tee $10
   i64.const 1
   i64.sub
-  local.tee $12
+  local.tee $11
   i64.and
-  local.set $8
-  local.get $3
-  local.get $10
+  local.set $1
+  local.get $2
+  local.get $8
   i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $7
+  local.tee $6
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $3
   loop $while-continue|0
-   local.get $4
+   local.get $3
    i32.const 0
    i32.gt_s
    if
@@ -18094,346 +22874,417 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
-               local.tee $2
+               local.get $3
+               local.tee $7
                i32.const 10
                i32.ne
                if
-                local.get $2
+                local.get $7
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $7
+               local.get $6
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $7
+               local.set $3
+               local.get $6
                i32.const 1000000000
                i32.rem_u
-               local.set $7
+               local.set $6
                br $break|1
               end
-              local.get $7
+              local.get $6
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $7
+              local.set $3
+              local.get $6
               i32.const 100000000
               i32.rem_u
-              local.set $7
+              local.set $6
               br $break|1
              end
-             local.get $7
+             local.get $6
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $7
+             local.set $3
+             local.get $6
              i32.const 10000000
              i32.rem_u
-             local.set $7
+             local.set $6
              br $break|1
             end
-            local.get $7
+            local.get $6
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $7
+            local.set $3
+            local.get $6
             i32.const 1000000
             i32.rem_u
-            local.set $7
+            local.set $6
             br $break|1
            end
-           local.get $7
+           local.get $6
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $7
+           local.set $3
+           local.get $6
            i32.const 100000
            i32.rem_u
-           local.set $7
+           local.set $6
            br $break|1
           end
-          local.get $7
+          local.get $6
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $7
+          local.set $3
+          local.get $6
           i32.const 10000
           i32.rem_u
-          local.set $7
+          local.set $6
           br $break|1
          end
-         local.get $7
+         local.get $6
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $7
+         local.set $3
+         local.get $6
          i32.const 1000
          i32.rem_u
-         local.set $7
+         local.set $6
          br $break|1
         end
-        local.get $7
+        local.get $6
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $7
+        local.set $3
+        local.get $6
         i32.const 100
         i32.rem_u
-        local.set $7
+        local.set $6
         br $break|1
        end
-       local.get $7
+       local.get $6
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $7
+       local.set $3
+       local.get $6
        i32.const 10
        i32.rem_u
-       local.set $7
+       local.set $6
        br $break|1
       end
-      local.get $7
-      local.set $2
+      local.get $6
+      local.set $3
       i32.const 0
-      local.set $7
+      local.set $6
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $6
+    local.get $3
+    local.get $5
     i32.or
     if
      local.get $0
-     local.get $6
+     local.get $5
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $6
+     local.get $5
      i32.const 1
      i32.add
-     local.set $6
+     local.set $5
     end
-    local.get $4
+    local.get $7
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $8
-    local.get $7
+    local.set $3
+    local.get $1
+    local.get $6
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $3
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $5
      local.get $4
+     local.get $2
+     local.get $3
      i32.const 2
      i32.shl
      i32.const 4056
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $6
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $2
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $2
-     local.get $4
-     i32.store16
-     local.get $6
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $5
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $13
-  loop $while-continue|4 (result i32)
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $8
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $13
-   i64.shr_u
    local.tee $1
-   local.get $6
+   local.get $2
+   i64.shr_u
+   local.tee $12
+   local.get $5
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $6
+    local.get $5
     i32.const 1
     i32.shl
     i32.add
-    local.get $1
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
-    i32.store16
-    local.get $6
-    i32.const 1
-    i32.add
-    local.set $6
-   end
-   local.get $4
-   i32.const 1
-   i32.sub
-   local.set $4
-   local.get $3
-   local.get $12
-   i64.and
-   local.tee $8
-   local.get $5
-   i64.ge_u
-   br_if $while-continue|4
-   local.get $4
-   global.get $~lib/util/number/_K
-   i32.add
-   global.set $~lib/util/number/_K
-   local.get $8
-   local.set $1
-   local.get $9
-   i32.const 0
-   local.get $4
-   i32.sub
-   i32.const 2
-   i32.shl
-   i32.const 4056
-   i32.add
-   i64.load32_u
-   i64.mul
-   local.set $3
-   local.get $0
-   local.get $6
-   i32.const 1
-   i32.sub
-   i32.const 1
-   i32.shl
-   i32.add
-   local.tee $2
-   i32.load16_u
-   local.set $4
-   loop $while-continue|6
-    i32.const 1
-    local.get $3
-    local.get $1
-    i64.sub
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.sub
-    i64.gt_u
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.lt_u
-    select
-    i32.const 0
+    i32.store16
     local.get $5
-    local.get $1
-    i64.sub
-    local.get $11
-    i64.ge_u
-    i32.const 0
-    local.get $1
-    local.get $3
-    i64.lt_u
-    select
-    select
-    if
-     local.get $4
-     i32.const 1
-     i32.sub
-     local.set $4
-     local.get $1
-     local.get $11
-     i64.add
-     local.set $1
-     br $while-continue|6
-    end
+    i32.const 1
+    i32.add
+    local.set $5
    end
-   local.get $2
+   local.get $3
+   i32.const 1
+   i32.sub
+   local.set $3
+   local.get $1
+   local.get $11
+   i64.and
+   local.tee $1
    local.get $4
-   i32.store16
-   local.get $6
+   i64.ge_u
+   br_if $while-continue|2
+  end
+  local.get $3
+  global.get $~lib/util/number/_K
+  i32.add
+  global.set $~lib/util/number/_K
+  local.get $0
+  local.get $5
+  local.get $4
+  local.get $1
+  local.get $10
+  local.get $9
+  i32.const 0
+  local.get $3
+  i32.sub
+  i32.const 2
+  i32.shl
+  i32.const 4056
+  i32.add
+  i64.load32_u
+  i64.mul
+  call $~lib/util/number/grisuRound
+  local.get $5
+ )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i32)
+  (local $6 i64)
+  (local $7 i32)
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $4
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $5
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $4
+  i64.const 4503599627370495
+  i64.and
+  i64.add
+  local.tee $4
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.tee $6
+  i64.clz
+  i32.wrap_i64
+  local.set $3
+  local.get $6
+  local.get $3
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_plus
+  local.get $5
+  i32.const 1
+  local.get $5
+  select
+  i32.const 1075
+  i32.sub
+  local.tee $5
+  i32.const 1
+  i32.sub
+  local.get $3
+  i32.sub
+  local.set $3
+  local.get $4
+  local.get $4
+  i64.const 4503599627370496
+  i64.eq
+  i32.const 1
+  i32.add
+  local.tee $7
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $5
+  local.get $7
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+  i32.const 348
+  i32.const -61
+  global.get $~lib/util/number/_exp
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.tee $0
+  i32.trunc_f64_s
+  local.tee $3
+  local.get $3
+  f64.convert_i32_s
+  local.get $0
+  f64.ne
+  i32.add
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.tee $3
+  i32.const 3
+  i32.shl
+  local.tee $7
+  i32.sub
+  global.set $~lib/util/number/_K
+  local.get $7
+  i32.const 3184
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.const 3880
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $3
+  local.get $1
+  local.get $4
+  local.get $4
+  i64.clz
+  i32.wrap_i64
+  i64.extend_i32_s
+  i64.shl
+  global.get $~lib/util/number/_frc_pow
+  local.tee $4
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $6
+  global.get $~lib/util/number/_exp
+  local.get $3
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $6
+  global.get $~lib/util/number/_frc_minus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
   end
+  local.get $1
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $1
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $1
  )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -18519,7 +23370,7 @@
     i32.sub
     i32.const 1
     i32.shl
-    call $~lib/memory/memory.copy
+    call $~lib/util/memory/memmove
     local.get $0
     i32.const 46
     i32.store16
@@ -18548,7 +23399,7 @@
      local.get $1
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $0
      i32.const 3014704
      i32.store
@@ -18585,36 +23436,12 @@
       i32.const 101
       i32.store16 offset=2
       local.get $0
-      local.tee $1
       i32.const 4
       i32.add
       local.get $3
       i32.const 1
       i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
+      call $~lib/util/number/genExponent
       i32.const 2
       i32.add
      else
@@ -18630,47 +23457,23 @@
       local.tee $2
       i32.const 2
       i32.sub
-      call $~lib/memory/memory.copy
+      call $~lib/util/memory/memmove
       local.get $0
       i32.const 46
       i32.store16 offset=2
       local.get $0
-      local.get $2
-      i32.add
-      local.tee $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      local.tee $2
-      i32.const 4
-      i32.add
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
+      local.get $2
       i32.add
       local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
+      i32.const 101
+      i32.store16 offset=2
       local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
       local.get $1
       i32.add
       i32.const 2
@@ -18681,294 +23484,33 @@
   end
  )
  (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i32)
-  (local $7 i64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i64)
+  (local $2 i32)
   local.get $1
   f64.const 0
   f64.lt
-  local.tee $8
-  if (result f64)
+  local.tee $2
+  if
    local.get $0
    i32.const 45
    i32.store16
    local.get $1
    f64.neg
-  else
-   local.get $1
+   local.set $1
   end
-  i64.reinterpret_f64
-  local.tee $3
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.tee $6
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $3
-  i64.const 4503599627370495
-  i64.and
-  i64.add
-  local.tee $2
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.tee $3
-  local.get $3
-  i64.clz
-  i32.wrap_i64
-  local.tee $4
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_plus
-  local.get $6
-  i32.const 1
-  local.get $6
-  select
-  i32.const 1075
-  i32.sub
-  local.tee $6
-  i32.const 1
-  i32.sub
-  local.get $4
-  i32.sub
-  local.set $4
-  local.get $2
-  local.get $2
-  i64.const 4503599627370496
-  i64.eq
-  i32.const 1
-  i32.add
-  local.tee $9
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $6
-  local.get $9
-  i32.sub
-  local.get $4
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $4
-  global.set $~lib/util/number/_exp
-  i32.const 348
-  i32.const -61
-  global.get $~lib/util/number/_exp
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.tee $1
-  i32.trunc_f64_s
-  local.tee $4
-  local.get $4
-  f64.convert_i32_s
-  local.get $1
-  f64.ne
-  i32.add
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.tee $4
-  i32.const 3
-  i32.shl
-  local.tee $9
-  i32.sub
-  global.set $~lib/util/number/_K
-  local.get $9
-  i32.const 3184
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  local.get $4
-  i32.const 1
-  i32.shl
-  i32.const 3880
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  global.get $~lib/util/number/_frc_pow
-  local.tee $3
-  i64.const 4294967295
-  i64.and
-  local.set $5
-  local.get $0
-  local.get $8
-  i32.const 1
-  i32.shl
-  i32.add
-  local.get $0
-  local.get $2
-  local.get $2
-  i64.clz
-  i32.wrap_i64
-  local.tee $0
-  i64.extend_i32_s
-  i64.shl
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $10
-  i64.mul
-  local.get $5
-  local.get $7
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $5
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $10
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $4
-  local.get $6
   local.get $0
-  i32.sub
-  i32.add
-  i32.const -64
-  i32.sub
-  global.get $~lib/util/number/_frc_plus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $10
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $10
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $2
-  local.get $4
-  global.get $~lib/util/number/_exp
-  i32.add
-  i32.const -64
-  i32.sub
-  local.get $2
-  global.get $~lib/util/number/_frc_minus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $3
-  local.get $5
-  i64.mul
   local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $3
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $3
-  i64.const 32
-  i64.shr_u
-  i64.add
+  i32.const 1
+  i32.shl
+  i32.add
+  local.get $1
+  local.get $0
+  local.get $2
+  call $~lib/util/number/grisu2
   local.get $2
-  local.get $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  local.get $8
-  call $~lib/util/number/genDigits
-  local.get $8
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.get $8
+  local.get $2
   i32.add
  )
  (func $~lib/util/number/dtoa (param $0 f64) (result i32)
@@ -19003,9 +23545,12 @@
    call $~lib/rt/pure/__retain
    return
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 56
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
   local.get $0
   call $~lib/util/number/dtoa_core
@@ -19126,8 +23671,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 28
   i32.add
@@ -19137,8 +23684,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -19170,7 +23722,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -19203,12 +23755,46 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/typedarray/Float32Array#join (param $0 i32) (result i32)
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float32Array,f32>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Float32Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  f32.const 1
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 1
+  f32.const 2
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 2
+  f32.const 3
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 3
+  f32.const 4
+  call $~lib/typedarray/Float32Array#__set
+  local.get $0
+  i32.const 4
+  f32.const 5
+  call $~lib/typedarray/Float32Array#__set
   local.get $0
   i32.load offset=4
   local.get $0
@@ -19216,6 +23802,64 @@
   i32.const 2
   i32.shr_u
   call $~lib/util/string/joinFloatArray<f32>
+  local.tee $2
+  i32.const 4112
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 626
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 2
+  i32.shr_u
+  call $~lib/util/string/joinFloatArray<f32>
+  local.tee $1
+  i32.const 4112
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 627
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/util/string/joinFloatArray<f64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
@@ -19242,8 +23886,10 @@
    return
   end
   local.get $3
-  i32.const 2976
-  call $~lib/string/String#get:length
+  i32.const 2972
+  i32.load
+  i32.const 1
+  i32.shr_u
   local.tee $4
   i32.const 28
   i32.add
@@ -19253,8 +23899,13 @@
   local.tee $6
   i32.const 1
   i32.shl
+  local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $1
   i32.const 1
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   call $~lib/rt/pure/__retain
   local.set $1
   loop $for-loop|0
@@ -19285,7 +23936,7 @@
      local.get $4
      i32.const 1
      i32.shl
-     call $~lib/memory/memory.copy
+     call $~lib/util/memory/memmove
      local.get $2
      local.get $4
      i32.add
@@ -19317,12 +23968,46 @@
    local.get $0
    call $~lib/string/String#substring
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   local.get $1
  )
- (func $~lib/typedarray/Float64Array#join (param $0 i32) (result i32)
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float64Array,f64>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  i32.const 5
+  call $~lib/typedarray/Float64Array#constructor
+  local.tee $0
+  local.set $1
+  local.get $0
+  i32.const 0
+  f64.const 1
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 1
+  f64.const 2
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 2
+  f64.const 3
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 3
+  f64.const 4
+  call $~lib/typedarray/Float64Array#__set
+  local.get $0
+  i32.const 4
+  f64.const 5
+  call $~lib/typedarray/Float64Array#__set
   local.get $0
   i32.load offset=4
   local.get $0
@@ -19330,6 +24015,64 @@
   i32.const 3
   i32.shr_u
   call $~lib/util/string/joinFloatArray<f64>
+  local.tee $2
+  i32.const 4112
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 626
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load offset=8
+  i32.const 3
+  i32.shr_u
+  call $~lib/util/string/joinFloatArray<f64>
+  local.tee $1
+  i32.const 4112
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 627
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/arraybuffer/ArrayBuffer#constructor (param $0 i32) (result i32)
   (local $1 i32)
@@ -19344,104 +24087,116 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.tee $1
-  i32.const 0
-  local.get $0
-  call $~lib/memory/memory.fill
-  local.get $1
-  call $~lib/rt/pure/__retain
- )
- (func $~lib/typedarray/Uint8Array.wrap@varargs (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  (local $3 i32)
-  block $2of2
-   block $1of2
-    block $0of2
-     block $outOfRange
-      global.get $~argumentsLength
-      i32.const 1
-      i32.sub
-      br_table $0of2 $1of2 $2of2 $outOfRange
-     end
-     unreachable
-    end
-    i32.const 0
-    local.set $1
-   end
-   i32.const -1
-   local.set $3
-  end
+  call $~lib/rt/tlsf/maybeInitialize
+  local.get $0
+  i32.const 0
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $1
+  i32.const 0
+  local.get $0
+  call $~lib/util/memory/memset
+  local.get $1
+  call $~lib/rt/pure/__retain
+ )
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
   local.get $1
   local.get $0
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $2
+  local.tee $3
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if (result i32)
-    local.get $2
+    local.get $3
     local.get $1
     i32.sub
    else
     i32.const 1040
     i32.const 1440
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
-   local.set $3
+   local.set $2
   else
    local.get $1
-   local.get $3
-   i32.add
    local.get $2
+   i32.add
+   local.get $3
    i32.gt_s
    if
     i32.const 1040
     i32.const 1440
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 4
-  call $~lib/rt/tlsf/__alloc
-  local.tee $2
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  local.tee $3
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $2
   local.get $3
-  i32.store offset=8
   local.get $2
+  i32.store offset=8
+  local.get $3
   local.get $0
   local.get $1
   i32.add
   i32.store offset=4
-  local.get $2
+  local.get $3
   call $~lib/rt/pure/__retain
  )
+ (func $~lib/typedarray/Uint8Array.wrap@varargs (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  block $2of2
+   block $1of2
+    block $0of2
+     block $outOfRange
+      global.get $~argumentsLength
+      i32.const 1
+      i32.sub
+      br_table $0of2 $1of2 $2of2 $outOfRange
+     end
+     unreachable
+    end
+    i32.const 0
+    local.set $1
+   end
+   i32.const -1
+   local.set $2
+  end
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8>
+ )
  (func $~lib/arraybuffer/ArrayBuffer#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
@@ -19471,6 +24226,7 @@
    select
   end
   local.set $1
+  call $~lib/rt/tlsf/maybeInitialize
   local.get $2
   i32.const 0
   i32.lt_s
@@ -19502,13 +24258,15 @@
   select
   local.tee $2
   i32.const 0
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $3
   local.get $0
   local.get $1
   i32.add
   local.get $2
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
   local.get $3
   call $~lib/rt/pure/__retain
  )
@@ -19522,88 +24280,97 @@
   (local $6 i32)
   i32.const 4252
   i32.load
-  local.tee $4
-  call $~lib/typedarray/Int8Array#constructor
   local.tee $5
-  local.set $2
+  call $~lib/typedarray/Int8Array#constructor
+  local.tee $6
+  local.set $3
   loop $for-loop|0
-   local.get $0
-   local.get $4
+   local.get $2
+   local.get $5
    i32.lt_s
    if
+    local.get $3
     local.get $2
-    local.get $0
     i32.const 4240
-    local.get $0
+    local.get $2
     call $~lib/array/Array<i32>#__get
     i32.const 24
     i32.shl
     i32.const 24
     i32.shr_s
     call $~lib/typedarray/Int8Array#__set
-    local.get $0
+    local.get $2
     i32.const 1
     i32.add
-    local.set $0
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
+  local.get $3
   i32.load
-  local.get $2
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  local.get $2
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  local.get $2
+  local.get $3
+  i32.load offset=4
+  local.get $3
+  i32.load
+  i32.sub
+  local.get $3
   i32.load offset=8
+  local.get $3
+  i32.load offset=4
+  local.get $3
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
-  local.set $0
+  local.set $2
   i32.const 1
   global.set $~argumentsLength
-  local.get $0
+  i32.const 0
+  local.get $2
   i32.const 16
   i32.sub
   i32.load offset=12
   local.tee $1
-  local.set $6
-  i32.const 0
-  local.get $1
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $1
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 3
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
-  local.get $0
+  local.get $2
   call $~lib/rt/pure/__retain
   i32.store
   local.get $1
-  local.get $6
+  local.get $0
   i32.store offset=8
   local.get $1
-  local.get $0
+  local.get $2
   i32.store offset=4
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $1
+  local.set $0
   loop $for-loop|1
-   local.get $3
    local.get $4
+   local.get $5
    i32.lt_s
    if
-    local.get $2
     local.get $3
+    local.get $4
     call $~lib/typedarray/Int8Array#__get
-    local.get $1
-    local.get $3
+    local.get $0
+    local.get $4
     call $~lib/typedarray/Int8Array#__get
     i32.ne
     if
@@ -19614,19 +24381,40 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $3
+    local.get $4
     i32.const 1
     i32.add
-    local.set $3
+    local.set $4
     br $for-loop|1
    end
   end
-  local.get $5
-  call $~lib/rt/pure/__release
+  local.get $6
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
@@ -19637,56 +24425,62 @@
   (local $5 i32)
   i32.const 4252
   i32.load
-  local.tee $3
+  local.tee $4
   call $~lib/typedarray/Uint8Array#constructor
   local.tee $5
-  local.set $1
+  local.set $0
   loop $for-loop|0
-   local.get $0
-   local.get $3
+   local.get $1
+   local.get $4
    i32.lt_s
    if
-    local.get $1
     local.get $0
+    local.get $1
     i32.const 4240
-    local.get $0
+    local.get $1
     call $~lib/array/Array<i32>#__get
     i32.const 255
     i32.and
     call $~lib/typedarray/Uint8Array#__set
-    local.get $0
+    local.get $1
     i32.const 1
     i32.add
-    local.set $0
+    local.set $1
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
   i32.load
-  local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  local.get $1
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load
+  i32.sub
+  local.get $0
   i32.load offset=8
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
-  local.set $0
+  local.set $1
   i32.const 1
   global.set $~argumentsLength
-  local.get $0
+  local.get $1
   i32.const 0
   call $~lib/typedarray/Uint8Array.wrap@varargs
-  local.set $4
+  local.set $3
   loop $for-loop|1
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
-    local.get $1
+    local.get $0
     local.get $2
     call $~lib/typedarray/Uint8Array#__get
-    local.get $4
+    local.get $3
     local.get $2
     call $~lib/typedarray/Uint8Array#__get
     i32.ne
@@ -19706,11 +24500,32 @@
    end
   end
   local.get $5
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $3
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
@@ -19722,86 +24537,95 @@
   (local $6 i32)
   i32.const 4252
   i32.load
-  local.tee $4
-  call $~lib/typedarray/Uint8ClampedArray#constructor
   local.tee $5
-  local.set $2
+  call $~lib/typedarray/Uint8ClampedArray#constructor
+  local.tee $6
+  local.set $3
   loop $for-loop|0
-   local.get $0
-   local.get $4
+   local.get $2
+   local.get $5
    i32.lt_s
    if
+    local.get $3
     local.get $2
-    local.get $0
     i32.const 4240
-    local.get $0
+    local.get $2
     call $~lib/array/Array<i32>#__get
     i32.const 255
     i32.and
     call $~lib/typedarray/Uint8ClampedArray#__set
-    local.get $0
+    local.get $2
     i32.const 1
     i32.add
-    local.set $0
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $2
+  local.get $3
+  i32.load
+  local.get $3
+  i32.load offset=4
+  local.get $3
   i32.load
-  local.get $2
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  local.get $2
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
-  local.get $2
+  i32.sub
+  local.get $3
   i32.load offset=8
+  local.get $3
+  i32.load offset=4
+  local.get $3
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
-  local.set $0
+  local.set $2
   i32.const 1
   global.set $~argumentsLength
-  local.get $0
+  i32.const 0
+  local.get $2
   i32.const 16
   i32.sub
   i32.load offset=12
   local.tee $1
-  local.set $6
-  i32.const 0
-  local.get $1
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $1
+  local.set $0
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 5
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $1
-  local.get $0
+  local.get $2
   call $~lib/rt/pure/__retain
   i32.store
   local.get $1
-  local.get $6
+  local.get $0
   i32.store offset=8
   local.get $1
-  local.get $0
+  local.get $2
   i32.store offset=4
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $1
+  local.set $0
   loop $for-loop|1
-   local.get $3
    local.get $4
+   local.get $5
    i32.lt_s
    if
-    local.get $2
     local.get $3
+    local.get $4
     call $~lib/typedarray/Uint8ClampedArray#__get
-    local.get $1
-    local.get $3
+    local.get $0
+    local.get $4
     call $~lib/typedarray/Uint8ClampedArray#__get
     i32.ne
     if
@@ -19812,19 +24636,40 @@
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $3
+    local.get $4
     i32.const 1
     i32.add
-    local.set $3
+    local.set $4
     br $for-loop|1
    end
   end
-  local.get $5
-  call $~lib/rt/pure/__release
+  local.get $6
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $2
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
@@ -19838,7 +24683,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -19865,11 +24710,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -19880,36 +24731,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 1
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 6
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -19944,12 +24798,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
@@ -19963,7 +24838,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Uint16Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -19988,11 +24863,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -20003,36 +24884,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 1
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 7
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -20067,12 +24951,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
@@ -20086,7 +24991,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Int32Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -20109,11 +25014,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -20124,36 +25035,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 3
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 8
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -20188,12 +25102,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
@@ -20207,7 +25142,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Uint32Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -20230,11 +25165,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -20245,36 +25186,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 3
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 9
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -20309,12 +25253,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
@@ -20328,7 +25293,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -20352,11 +25317,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -20367,36 +25338,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 7
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 10
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -20431,12 +25405,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
@@ -20450,7 +25445,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Uint64Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -20474,11 +25469,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -20489,36 +25490,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 7
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 11
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -20553,12 +25557,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
@@ -20572,7 +25597,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Float32Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -20596,11 +25621,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -20611,36 +25642,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 3
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 12
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -20675,12 +25709,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
@@ -20694,7 +25749,7 @@
   i32.load
   local.tee $4
   call $~lib/typedarray/Float64Array#constructor
-  local.tee $6
+  local.tee $5
   local.set $1
   loop $for-loop|0
    local.get $0
@@ -20718,11 +25773,17 @@
   local.get $1
   i32.load
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load
+  i32.sub
   local.get $1
   i32.load offset=8
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.add
   call $~lib/arraybuffer/ArrayBuffer#slice
   local.set $0
@@ -20733,36 +25794,39 @@
   i32.const 16
   i32.sub
   i32.load offset=12
-  local.tee $5
+  local.tee $6
   i32.gt_u
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $5
+  local.get $6
   i32.const 7
   i32.and
   if
    i32.const 1040
    i32.const 1440
-   i32.const 1746
+   i32.const 1710
    i32.const 9
    call $~lib/builtins/abort
    unreachable
   end
+  call $~lib/rt/tlsf/maybeInitialize
   i32.const 12
   i32.const 13
-  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
   local.tee $2
   local.get $0
   call $~lib/rt/pure/__retain
   i32.store
   local.get $2
-  local.get $5
+  local.get $6
   i32.store offset=8
   local.get $2
   local.get $0
@@ -20797,12 +25861,33 @@
     br $for-loop|1
    end
   end
-  local.get $6
-  call $~lib/rt/pure/__release
+  local.get $5
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
  (func $~lib/typedarray/Int8Array#set<~lib/array/Array<i32>> (param $0 i32)
   (local $1 i32)
@@ -20816,7 +25901,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -20858,9 +25943,10 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $4
   local.get $1
   i32.load offset=12
   i32.ne
@@ -20874,26 +25960,31 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Int8Array#__get
-    local.tee $4
-    local.get $1
+    local.set $3
     local.get $2
-    call $~lib/array/Array<i8>#__unchecked_get
+    local.get $1
+    i32.load offset=4
+    i32.add
+    i32.load8_s
     local.tee $5
+    local.set $6
+    local.get $3
+    local.get $5
     i32.ne
     if
      i32.const 4576
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i32_s
-     local.get $5
+     local.get $6
      f64.convert_i32_s
      f64.const 0
      f64.const 0
@@ -20913,7 +26004,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -20928,7 +26019,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -20969,7 +26060,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32)
   local.get $1
   i32.load offset=8
   local.get $0
@@ -20978,7 +26069,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -20989,9 +26080,9 @@
   i32.load offset=4
   local.get $1
   i32.load offset=8
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
  )
- (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -21006,7 +26097,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -21047,7 +26138,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int8Array#set<~lib/array/Array<i8>> (param $0 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<i8>,i8> (param $0 i32)
   i32.const 4524
   i32.load
   i32.const 7
@@ -21058,7 +26149,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -21071,7 +26162,7 @@
   i32.load
   i32.const 4520
   i32.load
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
  )
  (func $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array>
   (local $0 i32)
@@ -21082,84 +26173,84 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 f32)
-  (local $9 f64)
-  (local $10 i32)
+  (local $8 i32)
+  (local $9 f32)
+  (local $10 f64)
   (local $11 i32)
   (local $12 i32)
   i32.const 3
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $3
+  local.tee $4
   i32.const 0
   i64.const 7
   call $~lib/typedarray/Int64Array#__set
-  local.get $3
+  local.get $4
   i32.const 1
   i64.const 8
   call $~lib/typedarray/Int64Array#__set
-  local.get $3
+  local.get $4
   i32.const 2
   i64.const 9
   call $~lib/typedarray/Int64Array#__set
   i32.const 4
   call $~lib/typedarray/Uint8Array#constructor
-  local.tee $2
+  local.tee $3
   i32.const 0
   i32.const 100
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $3
   i32.const 1
   i32.const 101
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $3
   i32.const 2
   i32.const 102
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $3
   i32.const 3
   i32.const 103
   call $~lib/typedarray/Uint8Array#__set
   i32.const 3
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $4
+  local.tee $5
   i32.const 0
   i32.const 1000
   call $~lib/typedarray/Int16Array#__set
-  local.get $4
+  local.get $5
   i32.const 1
   i32.const 1001
   call $~lib/typedarray/Int16Array#__set
-  local.get $4
+  local.get $5
   i32.const 2
   i32.const 1002
   call $~lib/typedarray/Int16Array#__set
   i32.const 10
   call $~lib/typedarray/Int8Array#constructor
-  local.tee $1
+  local.tee $0
   call $~lib/typedarray/Int8Array#set<~lib/array/Array<i32>>
-  local.get $1
+  local.get $0
   i32.const 10
   i32.const 0
   i32.const 14
   i32.const 4544
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $10
+  local.tee $8
   call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array>
   block $folding-inner0
    i32.const 4380
    i32.load
    i32.const 3
    i32.add
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
    br_if $folding-inner0
-   local.get $1
+   local.get $0
    i32.load offset=4
    i32.const 3
    i32.add
-   local.set $5
+   local.set $1
    i32.const 4372
    i32.load
    local.set $6
@@ -21167,51 +26258,51 @@
    i32.load
    local.set $7
    loop $for-loop|0
-    local.get $0
+    local.get $2
     local.get $7
     i32.lt_s
     if
-     local.get $0
-     local.get $5
+     local.get $1
+     local.get $2
      i32.add
      local.get $6
-     local.get $0
+     local.get $2
      i32.const 2
      i32.shl
      i32.add
      f32.load
-     local.tee $8
-     local.get $8
+     local.tee $9
+     local.get $9
      f32.sub
      f32.const 0
      f32.eq
      if (result i32)
-      local.get $8
+      local.get $9
       i32.trunc_f32_s
      else
       i32.const 0
      end
      i32.store8
-     local.get $0
+     local.get $2
      i32.const 1
      i32.add
-     local.set $0
+     local.set $2
      br $for-loop|0
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 14
    i32.const 4624
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $5
+   local.tee $2
    call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array>
-   local.get $1
-   local.get $3
-   call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array>
-   local.get $1
+   local.get $0
+   local.get $4
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int64Array,i64>
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 14
@@ -21221,16 +26312,16 @@
    local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array>
    i32.const 0
-   local.set $0
+   local.set $1
    i32.const 4460
    i32.load
    i32.const 2
    i32.add
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
    br_if $folding-inner0
-   local.get $1
+   local.get $0
    i32.load offset=4
    i32.const 2
    i32.add
@@ -21242,106 +26333,163 @@
    i32.load
    local.set $12
    loop $for-loop|00
-    local.get $0
+    local.get $1
     local.get $12
     i32.lt_s
     if
-     local.get $0
+     local.get $1
      local.get $7
      i32.add
      local.get $11
-     local.get $0
+     local.get $1
      i32.const 3
      i32.shl
      i32.add
      f64.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f64.sub
      f64.const 0
      f64.eq
      if (result i32)
-      local.get $9
+      local.get $10
       i32.trunc_f64_s
      else
       i32.const 0
      end
      i32.store8
-     local.get $0
+     local.get $1
      i32.const 1
      i32.add
-     local.set $0
+     local.set $1
      br $for-loop|00
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 14
    i32.const 4688
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $0
+   local.tee $1
    call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array>
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   local.get $2
-   call $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array>
-   local.get $1
-   local.get $4
-   call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array>
-   local.get $1
-   call $~lib/typedarray/Int8Array#set<~lib/array/Array<i8>>
    local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $0
+   local.get $3
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Uint8Array,u8>
+   local.get $0
+   local.get $5
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int16Array,i16>
+   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<i8>,i8>
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 14
    i32.const 4720
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $0
+   local.tee $1
    call $std/typedarray/valuesEqual<~lib/typedarray/Int8Array>
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $4
-   call $~lib/rt/pure/__release
    local.get $1
-   call $~lib/rt/pure/__release
-   local.get $10
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $4
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $3
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $8
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $2
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
  )
- (func $~lib/array/Array<u8>#__unchecked_get (param $0 i32) (param $1 i32) (result i32)
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.add
-  i32.load8_u
- )
  (func $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $4
   local.get $1
   i32.load offset=12
   i32.ne
@@ -21355,26 +26503,31 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Uint8Array#__get
-    local.tee $4
-    local.get $1
+    local.set $3
     local.get $2
-    call $~lib/array/Array<u8>#__unchecked_get
+    local.get $1
+    i32.load offset=4
+    i32.add
+    i32.load8_u
     local.tee $5
+    local.set $6
+    local.get $3
+    local.get $5
     i32.ne
     if
      i32.const 4784
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i32_u
-     local.get $5
+     local.get $6
      f64.convert_i32_u
      f64.const 0
      f64.const 0
@@ -21403,84 +26556,84 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 f32)
-  (local $9 f64)
-  (local $10 i32)
+  (local $8 i32)
+  (local $9 f32)
+  (local $10 f64)
   (local $11 i32)
   (local $12 i32)
   i32.const 3
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $3
+  local.tee $4
   i32.const 0
   i64.const 7
   call $~lib/typedarray/Int64Array#__set
-  local.get $3
+  local.get $4
   i32.const 1
   i64.const 8
   call $~lib/typedarray/Int64Array#__set
-  local.get $3
+  local.get $4
   i32.const 2
   i64.const 9
   call $~lib/typedarray/Int64Array#__set
   i32.const 4
   call $~lib/typedarray/Uint8Array#constructor
-  local.tee $2
+  local.tee $3
   i32.const 0
   i32.const 100
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $3
   i32.const 1
   i32.const 101
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $3
   i32.const 2
   i32.const 102
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $3
   i32.const 3
   i32.const 103
   call $~lib/typedarray/Uint8Array#__set
   i32.const 3
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $4
+  local.tee $5
   i32.const 0
   i32.const 1000
   call $~lib/typedarray/Int16Array#__set
-  local.get $4
+  local.get $5
   i32.const 1
   i32.const 1001
   call $~lib/typedarray/Int16Array#__set
-  local.get $4
+  local.get $5
   i32.const 2
   i32.const 1002
   call $~lib/typedarray/Int16Array#__set
   i32.const 10
   call $~lib/typedarray/Uint8Array#constructor
-  local.tee $1
+  local.tee $0
   call $~lib/typedarray/Int8Array#set<~lib/array/Array<i32>>
-  local.get $1
+  local.get $0
   i32.const 10
   i32.const 0
   i32.const 18
   i32.const 4752
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $10
+  local.tee $8
   call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array>
   block $folding-inner0
    i32.const 4380
    i32.load
    i32.const 3
    i32.add
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
    br_if $folding-inner0
-   local.get $1
+   local.get $0
    i32.load offset=4
    i32.const 3
    i32.add
-   local.set $5
+   local.set $1
    i32.const 4372
    i32.load
    local.set $6
@@ -21488,51 +26641,51 @@
    i32.load
    local.set $7
    loop $for-loop|0
-    local.get $0
+    local.get $2
     local.get $7
     i32.lt_s
     if
-     local.get $0
-     local.get $5
+     local.get $1
+     local.get $2
      i32.add
      local.get $6
-     local.get $0
+     local.get $2
      i32.const 2
      i32.shl
      i32.add
      f32.load
-     local.tee $8
-     local.get $8
+     local.tee $9
+     local.get $9
      f32.sub
      f32.const 0
      f32.eq
      if (result i32)
-      local.get $8
+      local.get $9
       i32.trunc_f32_u
      else
       i32.const 0
      end
      i32.store8
-     local.get $0
+     local.get $2
      i32.const 1
      i32.add
-     local.set $0
+     local.set $2
      br $for-loop|0
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
    i32.const 4832
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $5
+   local.tee $2
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array>
-   local.get $1
-   local.get $3
-   call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array>
-   local.get $1
+   local.get $0
+   local.get $4
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int64Array,i64>
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
@@ -21542,16 +26695,16 @@
    local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array>
    i32.const 0
-   local.set $0
+   local.set $1
    i32.const 4460
    i32.load
    i32.const 2
    i32.add
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
    br_if $folding-inner0
-   local.get $1
+   local.get $0
    i32.load offset=4
    i32.const 2
    i32.add
@@ -21563,87 +26716,150 @@
    i32.load
    local.set $12
    loop $for-loop|00
-    local.get $0
+    local.get $1
     local.get $12
     i32.lt_s
     if
-     local.get $0
+     local.get $1
      local.get $7
      i32.add
      local.get $11
-     local.get $0
+     local.get $1
      i32.const 3
      i32.shl
      i32.add
      f64.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f64.sub
      f64.const 0
      f64.eq
      if (result i32)
-      local.get $9
+      local.get $10
       i32.trunc_f64_u
      else
       i32.const 0
      end
      i32.store8
-     local.get $0
+     local.get $1
      i32.const 1
      i32.add
-     local.set $0
+     local.set $1
      br $for-loop|00
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
    i32.const 4896
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $0
+   local.tee $1
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array>
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $1
-   local.get $2
-   call $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array>
-   local.get $1
-   local.get $4
-   call $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array>
-   local.get $1
-   call $~lib/typedarray/Int8Array#set<~lib/array/Array<i8>>
    local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $0
+   local.get $3
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Uint8Array,u8>
+   local.get $0
+   local.get $5
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int16Array,i16>
+   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<i8>,i8>
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
    i32.const 4928
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $0
+   local.tee $1
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8Array>
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $4
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $3
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $5
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $0
-   call $~lib/rt/pure/__release
-   local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $8
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $2
-   call $~lib/rt/pure/__release
-   local.get $4
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $10
-   call $~lib/rt/pure/__release
-   local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
@@ -21653,9 +26869,10 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
   local.get $0
   i32.load offset=8
-  local.tee $3
+  local.tee $4
   local.get $1
   i32.load offset=12
   i32.ne
@@ -21669,26 +26886,31 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Uint8ClampedArray#__get
-    local.tee $4
-    local.get $1
+    local.set $3
     local.get $2
-    call $~lib/array/Array<u8>#__unchecked_get
+    local.get $1
+    i32.load offset=4
+    i32.add
+    i32.load8_u
     local.tee $5
+    local.set $6
+    local.get $3
+    local.get $5
     i32.ne
     if
      i32.const 4992
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i32_u
-     local.get $5
+     local.get $6
      f64.convert_i32_u
      f64.const 0
      f64.const 0
@@ -21708,7 +26930,7 @@
    end
   end
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i64)
   local.get $2
@@ -21717,7 +26939,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
@@ -21734,7 +26956,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -21792,7 +27014,7 @@
    end
   end
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   local.get $2
@@ -21801,7 +27023,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
@@ -21818,7 +27040,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -21884,85 +27106,85 @@
   (local $8 i32)
   (local $9 i32)
   (local $10 i32)
-  (local $11 i32)
-  (local $12 f32)
+  (local $11 f32)
+  (local $12 i32)
   (local $13 f64)
   i32.const 3
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $7
+  local.tee $8
   i32.const 0
   i64.const 7
   call $~lib/typedarray/Int64Array#__set
-  local.get $7
+  local.get $8
   i32.const 1
   i64.const 8
   call $~lib/typedarray/Int64Array#__set
-  local.get $7
+  local.get $8
   i32.const 2
   i64.const 9
   call $~lib/typedarray/Int64Array#__set
   i32.const 4
   call $~lib/typedarray/Uint8Array#constructor
-  local.tee $2
+  local.tee $4
   i32.const 0
   i32.const 100
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $4
   i32.const 1
   i32.const 101
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $4
   i32.const 2
   i32.const 102
   call $~lib/typedarray/Uint8Array#__set
-  local.get $2
+  local.get $4
   i32.const 3
   i32.const 103
   call $~lib/typedarray/Uint8Array#__set
   i32.const 3
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $8
+  local.tee $9
   i32.const 0
   i32.const 1000
   call $~lib/typedarray/Int16Array#__set
-  local.get $8
+  local.get $9
   i32.const 1
   i32.const 1001
   call $~lib/typedarray/Int16Array#__set
-  local.get $8
+  local.get $9
   i32.const 2
   i32.const 1002
   call $~lib/typedarray/Int16Array#__set
   i32.const 10
   call $~lib/typedarray/Uint8ClampedArray#constructor
-  local.tee $1
-  local.set $3
-  block $folding-inner0
+  local.tee $0
+  local.set $2
+  block $folding-inner1
    i32.const 4316
    i32.load
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
-   br_if $folding-inner0
-   local.get $3
+   br_if $folding-inner1
+   local.get $2
    i32.load offset=4
-   local.set $9
+   local.set $6
    i32.const 4308
    i32.load
-   local.set $4
+   local.set $7
    i32.const 4316
    i32.load
-   local.set $5
+   local.set $2
    loop $for-loop|0
-    local.get $0
-    local.get $5
+    local.get $1
+    local.get $2
     i32.lt_s
     if
-     local.get $0
-     local.get $9
+     local.get $1
+     local.get $6
      i32.add
-     local.get $4
-     local.get $0
+     local.get $7
+     local.get $1
      i32.const 2
      i32.shl
      i32.add
@@ -21981,66 +27203,64 @@
      i32.or
      i32.and
      i32.store8
-     local.get $0
+     local.get $1
      i32.const 1
      i32.add
-     local.set $0
+     local.set $1
      br $for-loop|0
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
    i32.const 4960
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $9
+   local.tee $10
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
-   i32.const 0
-   local.set $0
    i32.const 4380
    i32.load
    i32.const 3
    i32.add
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
-   br_if $folding-inner0
-   local.get $1
+   br_if $folding-inner1
+   local.get $0
    i32.load offset=4
    i32.const 3
    i32.add
-   local.set $4
+   local.set $3
    i32.const 4372
    i32.load
-   local.set $5
+   local.set $6
    i32.const 4380
    i32.load
-   local.set $6
+   local.set $7
    loop $for-loop|00
-    local.get $0
-    local.get $6
+    local.get $5
+    local.get $7
     i32.lt_s
     if
-     local.get $0
-     local.get $4
+     local.get $3
+     local.get $5
      i32.add
+     local.get $6
      local.get $5
-     local.get $0
      i32.const 2
      i32.shl
      i32.add
      f32.load
-     local.tee $12
-     local.get $12
+     local.tee $11
+     local.get $11
      f32.sub
      f32.const 0
      f32.eq
      if (result i32)
       f32.const 0
       f32.const 255
-      local.get $12
+      local.get $11
       f32.min
       f32.max
       i32.trunc_f32_u
@@ -22048,27 +27268,27 @@
       i32.const 0
      end
      i32.store8
-     local.get $0
+     local.get $5
      i32.const 1
      i32.add
-     local.set $0
+     local.set $5
      br $for-loop|00
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
    i32.const 5056
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $4
+   local.tee $12
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
-   local.get $1
-   local.get $7
+   local.get $0
+   local.get $8
    i32.const 6
-   call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array>
-   local.get $1
+   call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int64Array,i64>
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
@@ -22078,36 +27298,36 @@
    local.tee $5
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
    i32.const 0
-   local.set $0
+   local.set $1
    i32.const 4460
    i32.load
    i32.const 2
    i32.add
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
-   br_if $folding-inner0
-   local.get $1
+   br_if $folding-inner1
+   local.get $0
    i32.load offset=4
    i32.const 2
    i32.add
-   local.set $6
+   local.set $3
    i32.const 4452
    i32.load
-   local.set $10
+   local.set $6
    i32.const 4460
    i32.load
-   local.set $11
+   local.set $7
    loop $for-loop|01
-    local.get $0
-    local.get $11
+    local.get $1
+    local.get $7
     i32.lt_s
     if
-     local.get $0
-     local.get $6
+     local.get $1
+     local.get $3
      i32.add
-     local.get $10
-     local.get $0
+     local.get $6
+     local.get $1
      i32.const 3
      i32.shl
      i32.add
@@ -22128,72 +27348,79 @@
       i32.const 0
      end
      i32.store8
-     local.get $0
+     local.get $1
      i32.const 1
      i32.add
-     local.set $0
+     local.set $1
      br $for-loop|01
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
    i32.const 5120
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $0
+   local.tee $2
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
-   local.get $0
-   call $~lib/rt/pure/__release
    local.get $2
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $4
    i32.load offset=8
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
-   br_if $folding-inner0
-   local.get $1
+   br_if $folding-inner1
+   local.get $0
    i32.load offset=4
-   local.get $2
+   local.get $4
    i32.load offset=4
-   local.get $2
+   local.get $4
    i32.load offset=8
-   call $~lib/memory/memory.copy
-   local.get $1
-   local.get $8
+   call $~lib/util/memory/memmove
+   local.get $0
+   local.get $9
    i32.const 4
-   call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array>
+   call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int16Array,i16>
    i32.const 0
-   local.set $0
+   local.set $1
    i32.const 4524
    i32.load
    i32.const 7
    i32.add
-   local.get $1
+   local.get $0
    i32.load offset=8
    i32.gt_s
-   br_if $folding-inner0
-   local.get $1
+   br_if $folding-inner1
+   local.get $0
    i32.load offset=4
    i32.const 7
    i32.add
    local.set $6
    i32.const 4516
    i32.load
-   local.set $10
+   local.set $7
    i32.const 4524
    i32.load
-   local.set $11
+   local.set $2
    loop $for-loop|02
-    local.get $0
-    local.get $11
+    local.get $1
+    local.get $2
     i32.lt_s
     if
-     local.get $0
+     local.get $1
      local.get $6
      i32.add
-     local.get $0
-     local.get $10
+     local.get $1
+     local.get $7
      i32.add
      i32.load8_s
      local.tee $3
@@ -22210,48 +27437,104 @@
      i32.or
      i32.and
      i32.store8
-     local.get $0
+     local.get $1
      i32.const 1
      i32.add
-     local.set $0
+     local.set $1
      br $for-loop|02
     end
    end
-   local.get $1
+   local.get $0
    i32.const 10
    i32.const 0
    i32.const 18
    i32.const 5152
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $0
+   local.tee $2
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $7
-   call $~lib/rt/pure/__release
    local.get $2
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $8
-   call $~lib/rt/pure/__release
-   local.get $1
-   call $~lib/rt/pure/__release
-   local.get $9
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $9
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $9
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $10
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $10
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $12
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $12
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
  )
- (func $~lib/typedarray/Int16Array#set<~lib/array/Array<i32>> (param $0 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i32>,i32> (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -22265,7 +27548,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -22314,6 +27597,8 @@
   i32.const 1
   i32.shr_u
   local.tee $3
+  local.set $4
+  local.get $3
   local.get $1
   i32.load offset=12
   i32.ne
@@ -22327,13 +27612,13 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Int16Array#__get
-    local.tee $4
+    local.tee $3
     local.get $1
     i32.load offset=4
     local.get $2
@@ -22348,7 +27633,7 @@
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i32_s
      local.get $5
      f64.convert_i32_s
@@ -22370,7 +27655,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -22387,7 +27672,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -22430,7 +27715,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -22443,7 +27728,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -22480,7 +27765,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32)
   local.get $1
   i32.load offset=8
   i32.const 1
@@ -22495,7 +27780,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -22508,9 +27793,9 @@
   i32.load offset=4
   local.get $1
   i32.load offset=8
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
  )
- (func $~lib/typedarray/Int16Array#set<~lib/array/Array<i8>> (param $0 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i8>,i8> (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -22526,7 +27811,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -22574,9 +27859,9 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 f32)
-  (local $9 f64)
-  (local $10 i32)
+  (local $8 i32)
+  (local $9 f32)
+  (local $10 f64)
   (local $11 i32)
   (local $12 i32)
   i32.const 3
@@ -22628,7 +27913,7 @@
   i32.const 10
   call $~lib/typedarray/Int16Array#constructor
   local.tee $1
-  call $~lib/typedarray/Int16Array#set<~lib/array/Array<i32>>
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i32>,i32>
   local.get $1
   i32.const 10
   i32.const 1
@@ -22636,7 +27921,7 @@
   i32.const 5184
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $10
+  local.tee $8
   call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array>
   block $folding-inner0
    i32.const 4380
@@ -22676,13 +27961,13 @@
      i32.shl
      i32.add
      f32.load
-     local.tee $8
-     local.get $8
+     local.tee $9
+     local.get $9
      f32.sub
      f32.const 0
      f32.eq
      if (result i32)
-      local.get $8
+      local.get $9
       i32.trunc_f32_s
      else
       i32.const 0
@@ -22702,11 +27987,11 @@
    i32.const 5280
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $5
+   local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array>
    local.get $1
    local.get $3
-   call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int64Array,i64>
    local.get $1
    i32.const 10
    i32.const 1
@@ -22714,7 +27999,7 @@
    i32.const 5328
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $6
+   local.tee $5
    call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array>
    i32.const 0
    local.set $0
@@ -22755,13 +28040,13 @@
      i32.shl
      i32.add
      f64.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f64.sub
      f64.const 0
      f64.eq
      if (result i32)
-      local.get $9
+      local.get $10
       i32.trunc_f64_s
      else
       i32.const 0
@@ -22784,15 +28069,22 @@
    local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array>
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $1
    local.get $2
-   call $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Uint8Array,u8>
    local.get $1
    local.get $4
-   call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int16Array,i16>
    local.get $1
-   call $~lib/typedarray/Int16Array#set<~lib/array/Array<i8>>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i8>,i8>
    local.get $1
    i32.const 10
    i32.const 1
@@ -22803,26 +28095,82 @@
    local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Int16Array>
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $2
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $1
-   call $~lib/rt/pure/__release
-   local.get $10
-   call $~lib/rt/pure/__release
-   local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $8
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $5
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
@@ -22837,6 +28185,8 @@
   i32.const 1
   i32.shr_u
   local.tee $3
+  local.set $4
+  local.get $3
   local.get $1
   i32.load offset=12
   i32.ne
@@ -22850,13 +28200,13 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Uint16Array#__get
-    local.tee $4
+    local.tee $3
     local.get $1
     i32.load offset=4
     local.get $2
@@ -22871,7 +28221,7 @@
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i32_u
      local.get $5
      f64.convert_i32_u
@@ -22902,9 +28252,9 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 f32)
-  (local $9 f64)
-  (local $10 i32)
+  (local $8 i32)
+  (local $9 f32)
+  (local $10 f64)
   (local $11 i32)
   (local $12 i32)
   i32.const 3
@@ -22956,7 +28306,7 @@
   i32.const 10
   call $~lib/typedarray/Uint16Array#constructor
   local.tee $1
-  call $~lib/typedarray/Int16Array#set<~lib/array/Array<i32>>
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i32>,i32>
   local.get $1
   i32.const 10
   i32.const 1
@@ -22964,7 +28314,7 @@
   i32.const 5472
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $10
+  local.tee $8
   call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array>
   block $folding-inner0
    i32.const 4380
@@ -23004,13 +28354,13 @@
      i32.shl
      i32.add
      f32.load
-     local.tee $8
-     local.get $8
+     local.tee $9
+     local.get $9
      f32.sub
      f32.const 0
      f32.eq
      if (result i32)
-      local.get $8
+      local.get $9
       i32.trunc_f32_u
      else
       i32.const 0
@@ -23030,11 +28380,11 @@
    i32.const 5568
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $5
+   local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array>
    local.get $1
    local.get $3
-   call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int64Array,i64>
    local.get $1
    i32.const 10
    i32.const 1
@@ -23042,7 +28392,7 @@
    i32.const 5616
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $6
+   local.tee $5
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array>
    i32.const 0
    local.set $0
@@ -23083,13 +28433,13 @@
      i32.shl
      i32.add
      f64.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f64.sub
      f64.const 0
      f64.eq
      if (result i32)
-      local.get $9
+      local.get $10
       i32.trunc_f64_u
      else
       i32.const 0
@@ -23112,15 +28462,22 @@
    local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array>
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $1
    local.get $2
-   call $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Uint8Array,u8>
    local.get $1
    local.get $4
-   call $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int16Array,i16>
    local.get $1
-   call $~lib/typedarray/Int16Array#set<~lib/array/Array<i8>>
+   call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i8>,i8>
    local.get $1
    i32.const 10
    i32.const 1
@@ -23131,31 +28488,87 @@
    local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint16Array>
    local.get $0
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $2
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $1
-   call $~lib/rt/pure/__release
-   local.get $10
-   call $~lib/rt/pure/__release
-   local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $8
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $5
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
  )
- (func $~lib/typedarray/Int32Array#set<~lib/array/Array<i32>> (param $0 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i32>,i32> (param $0 i32)
   i32.const 4316
   i32.load
   local.get $0
@@ -23166,7 +28579,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -23177,18 +28590,21 @@
   i32.load
   i32.const 4312
   i32.load
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
  )
  (func $std/typedarray/valuesEqual<~lib/typedarray/Int32Array> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
   local.tee $3
+  local.set $4
+  local.get $3
   local.get $1
   i32.load offset=12
   i32.ne
@@ -23202,26 +28618,33 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Int32Array#__get
-    local.tee $4
+    local.set $3
     local.get $1
+    i32.load offset=4
     local.get $2
-    call $~lib/array/Array<i32>#__unchecked_get
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
     local.tee $5
+    local.set $6
+    local.get $3
+    local.get $5
     i32.ne
     if
      i32.const 5824
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i32_s
-     local.get $5
+     local.get $6
      f64.convert_i32_s
      f64.const 0
      f64.const 0
@@ -23241,7 +28664,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -23258,7 +28681,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -23301,7 +28724,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -23314,7 +28737,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -23351,7 +28774,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -23368,7 +28791,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -23411,7 +28834,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int32Array#set<~lib/array/Array<i8>> (param $0 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i8>,i8> (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -23427,7 +28850,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -23476,9 +28899,9 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 f32)
-  (local $10 f64)
-  (local $11 i32)
+  (local $9 i32)
+  (local $10 f32)
+  (local $11 f64)
   (local $12 i32)
   i32.const 3
   call $~lib/typedarray/Int64Array#constructor
@@ -23528,201 +28951,264 @@
   call $~lib/typedarray/Int16Array#__set
   i32.const 10
   call $~lib/typedarray/Int32Array#constructor
-  local.tee $0
-  call $~lib/typedarray/Int32Array#set<~lib/array/Array<i32>>
-  local.get $0
+  local.tee $1
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i32>,i32>
+  local.get $1
   i32.const 10
   i32.const 2
   i32.const 15
   i32.const 5760
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $11
+  local.tee $9
   call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array>
   block $folding-inner0
    i32.const 4380
    i32.load
    i32.const 3
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 2
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 12
    i32.add
    local.set $5
    i32.const 4372
    i32.load
-   local.set $6
+   local.set $7
    i32.const 4380
    i32.load
-   local.set $7
+   local.set $8
    loop $for-loop|0
-    local.get $1
-    local.get $7
+    local.get $0
+    local.get $8
     i32.lt_s
     if
      local.get $5
-     local.get $1
+     local.get $0
      i32.const 2
      i32.shl
-     local.tee $8
+     local.tee $6
      i32.add
      local.get $6
-     local.get $8
+     local.get $7
      i32.add
      f32.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f32.sub
      f32.const 0
      f32.eq
      if (result i32)
-      local.get $9
+      local.get $10
       i32.trunc_f32_s
      else
       i32.const 0
      end
      i32.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|0
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 15
    i32.const 5872
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $5
+   local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array>
-   local.get $0
+   local.get $1
    local.get $3
-   call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int64Array,i64>
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 15
    i32.const 5936
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $6
+   local.tee $5
    call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array>
    i32.const 0
-   local.set $1
+   local.set $0
    i32.const 4460
    i32.load
    i32.const 2
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 2
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 8
    i32.add
-   local.set $7
+   local.set $8
    i32.const 4452
    i32.load
-   local.set $8
+   local.set $7
    i32.const 4460
    i32.load
    local.set $12
    loop $for-loop|00
-    local.get $1
+    local.get $0
     local.get $12
     i32.lt_s
-    if
-     local.get $7
-     local.get $1
+    if
+     local.get $8
+     local.get $0
      i32.const 2
      i32.shl
      i32.add
-     local.get $8
-     local.get $1
+     local.get $7
+     local.get $0
      i32.const 3
      i32.shl
      i32.add
      f64.load
-     local.tee $10
-     local.get $10
+     local.tee $11
+     local.get $11
      f64.sub
      f64.const 0
      f64.eq
      if (result i32)
-      local.get $10
+      local.get $11
       i32.trunc_f64_s
      else
       i32.const 0
      end
      i32.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|00
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 15
    i32.const 6000
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array>
-   local.get $1
-   call $~lib/rt/pure/__release
    local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
    local.get $2
-   call $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Uint8Array,u8>
+   local.get $1
    local.get $4
-   call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array>
-   local.get $0
-   call $~lib/typedarray/Int32Array#set<~lib/array/Array<i8>>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int16Array,i16>
+   local.get $1
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i8>,i8>
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 15
    i32.const 6064
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Int32Array>
-   local.get $1
-   call $~lib/rt/pure/__release
+   local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $2
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $11
-   call $~lib/rt/pure/__release
-   local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $9
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $9
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $5
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
@@ -23732,11 +29218,14 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
+  (local $6 i32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
   local.tee $3
+  local.set $4
+  local.get $3
   local.get $1
   i32.load offset=12
   i32.ne
@@ -23750,26 +29239,33 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Uint32Array#__get
-    local.tee $4
+    local.set $3
     local.get $1
+    i32.load offset=4
     local.get $2
-    call $~lib/array/Array<i32>#__unchecked_get
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
     local.tee $5
+    local.set $6
+    local.get $3
+    local.get $5
     i32.ne
     if
      i32.const 6192
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i32_u
-     local.get $5
+     local.get $6
      f64.convert_i32_u
      f64.const 0
      f64.const 0
@@ -23799,9 +29295,9 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 f32)
-  (local $10 f64)
-  (local $11 i32)
+  (local $9 i32)
+  (local $10 f32)
+  (local $11 f64)
   (local $12 i32)
   i32.const 3
   call $~lib/typedarray/Int64Array#constructor
@@ -23851,206 +29347,269 @@
   call $~lib/typedarray/Int16Array#__set
   i32.const 10
   call $~lib/typedarray/Uint32Array#constructor
-  local.tee $0
-  call $~lib/typedarray/Int32Array#set<~lib/array/Array<i32>>
-  local.get $0
+  local.tee $1
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i32>,i32>
+  local.get $1
   i32.const 10
   i32.const 2
   i32.const 21
   i32.const 6128
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $11
+  local.tee $9
   call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array>
   block $folding-inner0
    i32.const 4380
    i32.load
    i32.const 3
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 2
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 12
    i32.add
    local.set $5
    i32.const 4372
    i32.load
-   local.set $6
+   local.set $7
    i32.const 4380
    i32.load
-   local.set $7
+   local.set $8
    loop $for-loop|0
-    local.get $1
-    local.get $7
+    local.get $0
+    local.get $8
     i32.lt_s
     if
      local.get $5
-     local.get $1
+     local.get $0
      i32.const 2
      i32.shl
-     local.tee $8
+     local.tee $6
      i32.add
      local.get $6
-     local.get $8
+     local.get $7
      i32.add
      f32.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f32.sub
      f32.const 0
      f32.eq
      if (result i32)
-      local.get $9
+      local.get $10
       i32.trunc_f32_u
      else
       i32.const 0
      end
      i32.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|0
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 21
    i32.const 6240
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $5
+   local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array>
-   local.get $0
+   local.get $1
    local.get $3
-   call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int64Array,i64>
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 21
    i32.const 6304
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $6
+   local.tee $5
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array>
    i32.const 0
-   local.set $1
+   local.set $0
    i32.const 4460
    i32.load
    i32.const 2
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 2
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 8
    i32.add
-   local.set $7
+   local.set $8
    i32.const 4452
    i32.load
-   local.set $8
+   local.set $7
    i32.const 4460
    i32.load
    local.set $12
    loop $for-loop|00
-    local.get $1
+    local.get $0
     local.get $12
     i32.lt_s
     if
-     local.get $7
-     local.get $1
+     local.get $8
+     local.get $0
      i32.const 2
      i32.shl
      i32.add
-     local.get $8
-     local.get $1
+     local.get $7
+     local.get $0
      i32.const 3
      i32.shl
      i32.add
      f64.load
-     local.tee $10
-     local.get $10
+     local.tee $11
+     local.get $11
      f64.sub
      f64.const 0
      f64.eq
      if (result i32)
-      local.get $10
+      local.get $11
       i32.trunc_f64_u
      else
       i32.const 0
      end
      i32.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|00
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 21
    i32.const 6368
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array>
-   local.get $1
-   call $~lib/rt/pure/__release
    local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
    local.get $2
-   call $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Uint8Array,u8>
+   local.get $1
    local.get $4
-   call $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array>
-   local.get $0
-   call $~lib/typedarray/Int32Array#set<~lib/array/Array<i8>>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int16Array,i16>
+   local.get $1
+   call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i8>,i8>
+   local.get $1
    i32.const 10
    i32.const 2
    i32.const 21
    i32.const 6432
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint32Array>
-   local.get $1
-   call $~lib/rt/pure/__release
+   local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $2
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $11
-   call $~lib/rt/pure/__release
-   local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $9
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $9
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $5
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
  )
- (func $~lib/typedarray/Int64Array#set<~lib/array/Array<i32>> (param $0 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i32>,i32> (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -24064,7 +29623,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -24103,25 +29662,20 @@
    end
   end
  )
- (func $~lib/array/Array<i64>#__unchecked_get (param $0 i32) (param $1 i32) (result i64)
-  local.get $0
-  i32.load offset=4
-  local.get $1
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
- )
  (func $std/typedarray/valuesEqual<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i64)
-  (local $5 i64)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i64)
+  (local $7 i64)
   local.get $0
   i32.load offset=8
   i32.const 3
   i32.shr_u
-  local.tee $3
+  local.tee $4
+  local.set $5
+  local.get $4
   local.get $1
   i32.load offset=12
   i32.ne
@@ -24135,26 +29689,33 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $5
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Int64Array#__get
-    local.tee $4
+    local.set $3
     local.get $1
+    i32.load offset=4
     local.get $2
-    call $~lib/array/Array<i64>#__unchecked_get
-    local.tee $5
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.tee $6
+    local.set $7
+    local.get $3
+    local.get $6
     i64.ne
     if
      i32.const 6592
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i64_s
-     local.get $5
+     local.get $7
      f64.convert_i64_s
      f64.const 0
      f64.const 0
@@ -24174,7 +29735,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32)
   local.get $1
   i32.load offset=8
   i32.const 3
@@ -24189,7 +29750,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -24202,9 +29763,9 @@
   i32.load offset=4
   local.get $1
   i32.load offset=8
-  call $~lib/memory/memory.copy
+  call $~lib/util/memory/memmove
  )
- (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -24217,7 +29778,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -24254,7 +29815,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   local.get $1
@@ -24271,7 +29832,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -24314,7 +29875,7 @@
    end
   end
  )
- (func $~lib/typedarray/Int64Array#set<~lib/array/Array<i8>> (param $0 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i8>,i8> (param $0 i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -24330,7 +29891,7 @@
   if
    i32.const 1376
    i32.const 1440
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -24378,9 +29939,9 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 f32)
-  (local $9 f64)
-  (local $10 i32)
+  (local $8 i32)
+  (local $9 f32)
+  (local $10 f64)
   (local $11 i32)
   (local $12 i32)
   (local $13 i32)
@@ -24432,29 +29993,29 @@
   call $~lib/typedarray/Int16Array#__set
   i32.const 10
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $0
-  call $~lib/typedarray/Int64Array#set<~lib/array/Array<i32>>
-  local.get $0
+  local.tee $1
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i32>,i32>
+  local.get $1
   i32.const 10
   i32.const 3
   i32.const 22
   i32.const 6496
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $10
+  local.tee $8
   call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array>
   block $folding-inner0
    i32.const 4380
    i32.load
    i32.const 3
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 3
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 24
    i32.add
@@ -24466,41 +30027,41 @@
    i32.load
    local.set $7
    loop $for-loop|0
-    local.get $1
+    local.get $0
     local.get $7
     i32.lt_s
     if
      local.get $5
-     local.get $1
+     local.get $0
      i32.const 3
      i32.shl
      i32.add
      local.get $6
-     local.get $1
+     local.get $0
      i32.const 2
      i32.shl
      i32.add
      f32.load
-     local.tee $8
-     local.get $8
+     local.tee $9
+     local.get $9
      f32.sub
      f32.const 0
      f32.eq
      if (result i64)
-      local.get $8
+      local.get $9
       i64.trunc_f32_s
      else
       i64.const 0
      end
      i64.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|0
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 22
@@ -24509,10 +30070,10 @@
    call $~lib/rt/pure/__retain
    local.tee $5
    call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array>
-   local.get $0
+   local.get $1
    local.get $3
-   call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int64Array,i64>
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 22
@@ -24522,18 +30083,18 @@
    local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array>
    i32.const 0
-   local.set $1
+   local.set $0
    i32.const 4460
    i32.load
    i32.const 2
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 3
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 16
    i32.add
@@ -24545,12 +30106,12 @@
    i32.load
    local.set $12
    loop $for-loop|00
-    local.get $1
+    local.get $0
     local.get $12
     i32.lt_s
     if
      local.get $7
-     local.get $1
+     local.get $0
      i32.const 3
      i32.shl
      local.tee $13
@@ -24559,88 +30120,155 @@
      local.get $13
      i32.add
      f64.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f64.sub
      f64.const 0
      f64.eq
      if (result i64)
-      local.get $9
+      local.get $10
       i64.trunc_f64_s
      else
       i64.const 0
      end
      i64.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|00
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 22
    i32.const 6832
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array>
-   local.get $1
-   call $~lib/rt/pure/__release
    local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
    local.get $2
-   call $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Uint8Array,u8>
+   local.get $1
    local.get $4
-   call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array>
-   local.get $0
-   call $~lib/typedarray/Int64Array#set<~lib/array/Array<i8>>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int16Array,i16>
+   local.get $1
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i8>,i8>
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 22
    i32.const 6928
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Int64Array>
-   local.get $1
-   call $~lib/rt/pure/__release
+   local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $2
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $10
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $8
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
  )
  (func $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array> (param $0 i32) (param $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i64)
-  (local $5 i64)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i64)
+  (local $7 i64)
   local.get $0
   i32.load offset=8
   i32.const 3
   i32.shr_u
-  local.tee $3
+  local.tee $4
+  local.set $5
+  local.get $4
   local.get $1
   i32.load offset=12
   i32.ne
@@ -24654,26 +30282,33 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $5
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Uint64Array#__get
-    local.tee $4
+    local.set $3
     local.get $1
+    i32.load offset=4
     local.get $2
-    call $~lib/array/Array<i64>#__unchecked_get
-    local.tee $5
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.tee $6
+    local.set $7
+    local.get $3
+    local.get $6
     i64.ne
     if
      i32.const 7120
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
+     local.get $3
      f64.convert_i64_u
-     local.get $5
+     local.get $7
      f64.convert_i64_u
      f64.const 0
      f64.const 0
@@ -24702,9 +30337,9 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 f32)
-  (local $9 f64)
-  (local $10 i32)
+  (local $8 i32)
+  (local $9 f32)
+  (local $10 f64)
   (local $11 i32)
   (local $12 i32)
   (local $13 i32)
@@ -24756,29 +30391,29 @@
   call $~lib/typedarray/Int16Array#__set
   i32.const 10
   call $~lib/typedarray/Uint64Array#constructor
-  local.tee $0
-  call $~lib/typedarray/Int64Array#set<~lib/array/Array<i32>>
-  local.get $0
+  local.tee $1
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i32>,i32>
+  local.get $1
   i32.const 10
   i32.const 3
   i32.const 23
   i32.const 7024
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $10
+  local.tee $8
   call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array>
   block $folding-inner0
    i32.const 4380
    i32.load
    i32.const 3
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 3
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 24
    i32.add
@@ -24790,41 +30425,41 @@
    i32.load
    local.set $7
    loop $for-loop|0
-    local.get $1
+    local.get $0
     local.get $7
     i32.lt_s
     if
      local.get $5
-     local.get $1
+     local.get $0
      i32.const 3
      i32.shl
      i32.add
      local.get $6
-     local.get $1
+     local.get $0
      i32.const 2
      i32.shl
      i32.add
      f32.load
-     local.tee $8
-     local.get $8
+     local.tee $9
+     local.get $9
      f32.sub
      f32.const 0
      f32.eq
      if (result i64)
-      local.get $8
+      local.get $9
       i64.trunc_f32_u
      else
       i64.const 0
      end
      i64.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|0
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 23
@@ -24833,10 +30468,10 @@
    call $~lib/rt/pure/__retain
    local.tee $5
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array>
-   local.get $0
+   local.get $1
    local.get $3
-   call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int64Array,i64>
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 23
@@ -24846,18 +30481,18 @@
    local.tee $6
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array>
    i32.const 0
-   local.set $1
+   local.set $0
    i32.const 4460
    i32.load
    i32.const 2
    i32.add
-   local.get $0
+   local.get $1
    i32.load offset=8
    i32.const 3
    i32.shr_u
    i32.gt_s
    br_if $folding-inner0
-   local.get $0
+   local.get $1
    i32.load offset=4
    i32.const 16
    i32.add
@@ -24869,12 +30504,12 @@
    i32.load
    local.set $12
    loop $for-loop|00
-    local.get $1
+    local.get $0
     local.get $12
     i32.lt_s
     if
      local.get $7
-     local.get $1
+     local.get $0
      i32.const 3
      i32.shl
      local.tee $13
@@ -24883,74 +30518,137 @@
      local.get $13
      i32.add
      f64.load
-     local.tee $9
-     local.get $9
+     local.tee $10
+     local.get $10
      f64.sub
      f64.const 0
      f64.eq
      if (result i64)
-      local.get $9
+      local.get $10
       i64.trunc_f64_u
      else
       i64.const 0
      end
      i64.store
-     local.get $1
+     local.get $0
      i32.const 1
      i32.add
-     local.set $1
+     local.set $0
      br $for-loop|00
     end
    end
-   local.get $0
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 23
    i32.const 7360
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array>
-   local.get $1
-   call $~lib/rt/pure/__release
    local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
    local.get $2
-   call $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Uint8Array,u8>
+   local.get $1
    local.get $4
-   call $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array>
-   local.get $0
-   call $~lib/typedarray/Int64Array#set<~lib/array/Array<i8>>
-   local.get $0
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int16Array,i16>
+   local.get $1
+   call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i8>,i8>
+   local.get $1
    i32.const 10
    i32.const 3
    i32.const 23
    i32.const 7456
    call $~lib/rt/__allocArray
    call $~lib/rt/pure/__retain
-   local.tee $1
+   local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Uint64Array>
-   local.get $1
-   call $~lib/rt/pure/__release
+   local.get $0
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $2
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $2
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
-   local.get $0
-   call $~lib/rt/pure/__release
-   local.get $10
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $8
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
@@ -24958,13 +30656,16 @@
  (func $std/typedarray/valuesEqual<~lib/typedarray/Float32Array> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 f32)
+  (local $4 i32)
   (local $5 f32)
+  (local $6 f32)
   local.get $0
   i32.load offset=8
   i32.const 2
   i32.shr_u
   local.tee $3
+  local.set $4
+  local.get $3
   local.get $1
   i32.load offset=12
   i32.ne
@@ -24978,13 +30679,13 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Float32Array#__get
-    local.tee $4
+    local.tee $5
     local.get $1
     i32.load offset=4
     local.get $2
@@ -24992,17 +30693,17 @@
     i32.shl
     i32.add
     f32.load
-    local.tee $5
+    local.tee $6
     f32.ne
     if
      i32.const 7616
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
-     f64.promote_f32
      local.get $5
      f64.promote_f32
+     local.get $6
+     f64.promote_f32
      f64.const 0
      f64.const 0
      call $~lib/builtins/trace
@@ -25035,15 +30736,15 @@
   (local $10 i32)
   i32.const 3
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $5
+  local.tee $4
   i32.const 0
   i64.const 7
   call $~lib/typedarray/Int64Array#__set
-  local.get $5
+  local.get $4
   i32.const 1
   i64.const 8
   call $~lib/typedarray/Int64Array#__set
-  local.get $5
+  local.get $4
   i32.const 2
   i64.const 9
   call $~lib/typedarray/Int64Array#__set
@@ -25067,15 +30768,15 @@
   call $~lib/typedarray/Uint8Array#__set
   i32.const 3
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $6
+  local.tee $5
   i32.const 0
   i32.const 1000
   call $~lib/typedarray/Int16Array#__set
-  local.get $6
+  local.get $5
   i32.const 1
   i32.const 1001
   call $~lib/typedarray/Int16Array#__set
-  local.get $6
+  local.get $5
   i32.const 2
   i32.const 1002
   call $~lib/typedarray/Int16Array#__set
@@ -25152,7 +30853,7 @@
    i32.load
    i32.const 4376
    i32.load
-   call $~lib/memory/memory.copy
+   call $~lib/util/memory/memmove
    local.get $1
    i32.const 10
    i32.const 2
@@ -25164,7 +30865,7 @@
    call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array>
    i32.const 0
    local.set $0
-   local.get $5
+   local.get $4
    i32.load offset=8
    i32.const 3
    i32.shr_u
@@ -25181,17 +30882,17 @@
    i32.const 24
    i32.add
    local.set $8
-   local.get $5
+   local.get $4
    i32.load offset=4
    local.set $2
-   local.get $5
+   local.get $4
    i32.load offset=8
    i32.const 3
    i32.shr_u
-   local.set $4
+   local.set $6
    loop $for-loop|00
     local.get $0
-    local.get $4
+    local.get $6
     i32.lt_s
     if
      local.get $8
@@ -25238,7 +30939,7 @@
    local.set $2
    local.get $3
    i32.load offset=4
-   local.set $4
+   local.set $6
    local.get $3
    i32.load offset=8
    local.set $9
@@ -25253,7 +30954,7 @@
      i32.shl
      i32.add
      local.get $0
-     local.get $4
+     local.get $6
      i32.add
      i32.load8_u
      f32.convert_i32_u
@@ -25267,7 +30968,7 @@
    end
    i32.const 0
    local.set $0
-   local.get $6
+   local.get $5
    i32.load offset=8
    i32.const 1
    i32.shr_u
@@ -25284,10 +30985,10 @@
    i32.const 16
    i32.add
    local.set $2
-   local.get $6
+   local.get $5
    i32.load offset=4
-   local.set $4
-   local.get $6
+   local.set $6
+   local.get $5
    i32.load offset=8
    i32.const 1
    i32.shr_u
@@ -25302,7 +31003,7 @@
      i32.const 2
      i32.shl
      i32.add
-     local.get $4
+     local.get $6
      local.get $0
      i32.const 1
      i32.shl
@@ -25336,7 +31037,7 @@
    local.set $2
    i32.const 4516
    i32.load
-   local.set $4
+   local.set $6
    i32.const 4524
    i32.load
    local.set $9
@@ -25351,7 +31052,7 @@
      i32.shl
      i32.add
      local.get $0
-     local.get $4
+     local.get $6
      i32.add
      i32.load8_s
      f32.convert_i32_s
@@ -25373,26 +31074,82 @@
    local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Float32Array>
    local.get $0
-   call $~lib/rt/pure/__release
-   local.get $5
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $4
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $5
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $7
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $7
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $10
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $10
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $8
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $8
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
@@ -25400,13 +31157,16 @@
  (func $std/typedarray/valuesEqual<~lib/typedarray/Float64Array> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 f64)
+  (local $4 i32)
   (local $5 f64)
+  (local $6 f64)
   local.get $0
   i32.load offset=8
   i32.const 3
   i32.shr_u
   local.tee $3
+  local.set $4
+  local.get $3
   local.get $1
   i32.load offset=12
   i32.ne
@@ -25420,13 +31180,13 @@
   end
   loop $for-loop|0
    local.get $2
-   local.get $3
+   local.get $4
    i32.lt_s
    if
     local.get $0
     local.get $2
     call $~lib/typedarray/Float64Array#__get
-    local.tee $4
+    local.tee $5
     local.get $1
     i32.load offset=4
     local.get $2
@@ -25434,15 +31194,15 @@
     i32.shl
     i32.add
     f64.load
-    local.tee $5
+    local.tee $6
     f64.ne
     if
      i32.const 7952
      i32.const 3
      local.get $2
      f64.convert_i32_s
-     local.get $4
      local.get $5
+     local.get $6
      f64.const 0
      f64.const 0
      call $~lib/builtins/trace
@@ -25475,15 +31235,15 @@
   (local $10 i32)
   i32.const 3
   call $~lib/typedarray/Int64Array#constructor
-  local.tee $7
+  local.tee $5
   i32.const 0
   i64.const 7
   call $~lib/typedarray/Int64Array#__set
-  local.get $7
+  local.get $5
   i32.const 1
   i64.const 8
   call $~lib/typedarray/Int64Array#__set
-  local.get $7
+  local.get $5
   i32.const 2
   i64.const 9
   call $~lib/typedarray/Int64Array#__set
@@ -25507,15 +31267,15 @@
   call $~lib/typedarray/Uint8Array#__set
   i32.const 3
   call $~lib/typedarray/Int16Array#constructor
-  local.tee $8
+  local.tee $6
   i32.const 0
   i32.const 1000
   call $~lib/typedarray/Int16Array#__set
-  local.get $8
+  local.get $6
   i32.const 1
   i32.const 1001
   call $~lib/typedarray/Int16Array#__set
-  local.get $8
+  local.get $6
   i32.const 2
   i32.const 1002
   call $~lib/typedarray/Int16Array#__set
@@ -25634,7 +31394,7 @@
    call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array>
    i32.const 0
    local.set $0
-   local.get $7
+   local.get $5
    i32.load offset=8
    i32.const 3
    i32.shr_u
@@ -25651,27 +31411,27 @@
    i32.const 48
    i32.add
    local.set $4
-   local.get $7
+   local.get $5
    i32.load offset=4
    local.set $2
-   local.get $7
+   local.get $5
    i32.load offset=8
    i32.const 3
    i32.shr_u
-   local.set $5
+   local.set $7
    loop $for-loop|01
     local.get $0
-    local.get $5
+    local.get $7
     i32.lt_s
     if
      local.get $4
      local.get $0
      i32.const 3
      i32.shl
-     local.tee $6
+     local.tee $8
      i32.add
      local.get $2
-     local.get $6
+     local.get $8
      i32.add
      i64.load
      f64.convert_i64_s
@@ -25707,13 +31467,13 @@
    local.set $2
    local.get $3
    i32.load offset=4
-   local.set $5
+   local.set $7
    local.get $3
    i32.load offset=8
-   local.set $6
+   local.set $8
    loop $for-loop|02
     local.get $0
-    local.get $6
+    local.get $8
     i32.lt_s
     if
      local.get $2
@@ -25722,7 +31482,7 @@
      i32.shl
      i32.add
      local.get $0
-     local.get $5
+     local.get $7
      i32.add
      i32.load8_u
      f64.convert_i32_u
@@ -25736,7 +31496,7 @@
    end
    i32.const 0
    local.set $0
-   local.get $8
+   local.get $6
    i32.load offset=8
    i32.const 1
    i32.shr_u
@@ -25753,17 +31513,17 @@
    i32.const 32
    i32.add
    local.set $2
-   local.get $8
+   local.get $6
    i32.load offset=4
-   local.set $5
-   local.get $8
+   local.set $7
+   local.get $6
    i32.load offset=8
    i32.const 1
    i32.shr_u
-   local.set $6
+   local.set $8
    loop $for-loop|03
     local.get $0
-    local.get $6
+    local.get $8
     i32.lt_s
     if
      local.get $2
@@ -25771,7 +31531,7 @@
      i32.const 3
      i32.shl
      i32.add
-     local.get $5
+     local.get $7
      local.get $0
      i32.const 1
      i32.shl
@@ -25805,13 +31565,13 @@
    local.set $2
    i32.const 4516
    i32.load
-   local.set $5
+   local.set $7
    i32.const 4524
    i32.load
-   local.set $6
+   local.set $8
    loop $for-loop|04
     local.get $0
-    local.get $6
+    local.get $8
     i32.lt_s
     if
      local.get $2
@@ -25820,7 +31580,7 @@
      i32.shl
      i32.add
      local.get $0
-     local.get $5
+     local.get $7
      i32.add
      i32.load8_s
      f64.convert_i32_s
@@ -25842,26 +31602,82 @@
    local.tee $0
    call $std/typedarray/valuesEqual<~lib/typedarray/Float64Array>
    local.get $0
-   call $~lib/rt/pure/__release
-   local.get $7
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $0
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $5
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $5
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $3
-   call $~lib/rt/pure/__release
-   local.get $8
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $3
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   local.get $6
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $6
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $1
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $9
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $9
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $10
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $10
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    local.get $4
-   call $~lib/rt/pure/__release
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $4
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
    return
   end
   i32.const 1376
   i32.const 1440
-  i32.const 1775
+  i32.const 1737
   i32.const 47
   call $~lib/builtins/abort
   unreachable
@@ -25883,21 +31699,19 @@
   (local $13 i32)
   (local $14 i32)
   (local $15 i32)
-  (local $16 f32)
+  (local $16 f64)
   (local $17 i32)
   (local $18 i32)
   (local $19 i32)
-  (local $20 i64)
+  (local $20 f32)
   (local $21 f64)
-  (local $22 f32)
-  (local $23 f64)
+  (local $22 i32)
+  (local $23 i32)
   (local $24 i32)
   (local $25 i32)
   (local $26 i32)
   (local $27 i32)
   (local $28 i32)
-  (local $29 i32)
-  (local $30 i32)
   i32.const 0
   call $std/typedarray/testInstantiate
   i32.const 5
@@ -25931,7 +31745,10 @@
    unreachable
   end
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -25994,10 +31811,17 @@
   local.get $1
   i32.const 1
   i32.const 2
-  call $~lib/typedarray/Int32Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32>
   local.set $0
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   i32.load offset=8
   i32.const 2
@@ -26013,7 +31837,10 @@
    unreachable
   end
   local.get $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $0
+  i32.load
+  i32.sub
   i32.const 4
   i32.ne
   if
@@ -26050,49 +31877,63 @@
    unreachable
   end
   local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 8
   call $~lib/typedarray/Float64Array#constructor
-  local.tee $1
+  local.tee $0
   i32.const 0
   f64.const 1
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 1
   f64.const 2
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 2
   f64.const 7
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 3
   f64.const 6
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 4
   f64.const 5
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 5
   f64.const 4
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 6
   f64.const 3
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 7
   f64.const 8
   call $~lib/typedarray/Float64Array#__set
-  local.get $1
+  local.get $0
   i32.const 2
   i32.const 6
-  call $~lib/typedarray/Float64Array#subarray
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Float64Array,f64>
+  local.set $1
   local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
   i32.load offset=8
   i32.const 3
   i32.shr_u
@@ -26106,8 +31947,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  local.get $1
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.const 16
   i32.ne
   if
@@ -26118,7 +31962,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $1
   i32.load offset=8
   i32.const 32
   i32.ne
@@ -26132,69 +31976,76 @@
   end
   i32.const 0
   global.set $~argumentsLength
-  block $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0
-   local.get $0
+  block $__inlined_func$~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>
+   local.get $1
    call $~lib/rt/pure/__retain
-   local.tee $29
+   local.tee $27
    i32.load offset=8
    i32.const 3
    i32.shr_u
-   local.tee $30
+   local.tee $28
    i32.const 1
    i32.le_s
-   br_if $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0
-   local.get $29
+   br_if $__inlined_func$~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>
+   local.get $27
    i32.load offset=4
-   local.set $1
-   local.get $30
+   local.set $0
+   local.get $28
    i32.const 2
    i32.eq
    if
-    local.get $1
+    local.get $0
     f64.load offset=8
-    local.set $23
-    local.get $1
-    f64.load
     local.set $21
+    local.get $0
+    f64.load
+    local.set $16
     i32.const 2
     global.set $~argumentsLength
-    local.get $23
     local.get $21
+    local.get $16
     call $~lib/util/sort/COMPARATOR<f64>~anonymous|0
     i32.const 0
     i32.lt_s
     if
-     local.get $1
-     local.get $21
+     local.get $0
+     local.get $16
      f64.store offset=8
-     local.get $1
-     local.get $23
+     local.get $0
+     local.get $21
      f64.store
     end
-    br $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0
+    br $__inlined_func$~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>
    end
-   local.get $30
+   local.get $28
    i32.const 256
    i32.lt_s
    if
-    local.get $1
-    local.get $30
+    local.get $0
+    local.get $28
     call $~lib/util/sort/insertionSort<f64>
    else
-    local.get $1
-    local.get $30
+    local.get $0
+    local.get $28
     call $~lib/util/sort/weakHeapSort<f64>
    end
   end
-  local.get $29
-  call $~lib/rt/pure/__release
-  local.get $0
+  local.get $27
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
   i32.const 0
   call $~lib/typedarray/Float64Array#__get
   f64.const 4
   f64.eq
   if (result i32)
-   local.get $0
+   local.get $1
    i32.const 1
    call $~lib/typedarray/Float64Array#__get
    f64.const 5
@@ -26203,7 +32054,7 @@
    i32.const 0
   end
   if (result i32)
-   local.get $0
+   local.get $1
    i32.const 2
    call $~lib/typedarray/Float64Array#__get
    f64.const 6
@@ -26212,7 +32063,7 @@
    i32.const 0
   end
   if (result i32)
-   local.get $0
+   local.get $1
    i32.const 3
    call $~lib/typedarray/Float64Array#__get
    f64.const 7
@@ -26229,8 +32080,15 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
-  call $~lib/rt/pure/__release
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 3
   call $~lib/typedarray/Uint8ClampedArray#constructor
   local.tee $1
@@ -26283,7 +32141,14 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 5
   call $~lib/typedarray/Int8Array#constructor
   local.tee $1
@@ -26310,8 +32175,18 @@
   i32.const 1
   i32.const 1
   i32.const 3
-  call $~lib/typedarray/Int8Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8>
+  local.tee $0
+  local.set $28
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 0
@@ -26319,7 +32194,7 @@
   i32.const 1504
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $30
+  local.tee $28
   call $std/typedarray/isInt8ArrayEqual
   i32.eqz
   if
@@ -26334,8 +32209,18 @@
   i32.const 0
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int8Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8>
+  local.tee $0
+  local.set $27
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 0
@@ -26343,7 +32228,7 @@
   i32.const 1584
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $29
+  local.tee $27
   call $std/typedarray/isInt8ArrayEqual
   i32.eqz
   if
@@ -26358,8 +32243,18 @@
   i32.const 1
   i32.const 0
   i32.const -3
-  call $~lib/typedarray/Int8Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8>
+  local.tee $0
+  local.set $26
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 0
@@ -26367,7 +32262,7 @@
   i32.const 1616
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $28
+  local.tee $26
   call $std/typedarray/isInt8ArrayEqual
   i32.eqz
   if
@@ -26382,8 +32277,18 @@
   i32.const 2
   i32.const -2
   i32.const 2147483647
-  call $~lib/typedarray/Int8Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8>
+  local.tee $0
+  local.set $24
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 0
@@ -26391,7 +32296,7 @@
   i32.const 1648
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $27
+  local.tee $24
   call $std/typedarray/isInt8ArrayEqual
   i32.eqz
   if
@@ -26406,8 +32311,18 @@
   i32.const 0
   i32.const 1
   i32.const 0
-  call $~lib/typedarray/Int8Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8>
+  local.tee $0
+  local.set $25
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 0
@@ -26415,7 +32330,7 @@
   i32.const 1680
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $26
+  local.tee $25
   call $std/typedarray/isInt8ArrayEqual
   i32.eqz
   if
@@ -26429,13 +32344,23 @@
   local.get $1
   i32.const 1
   i32.const 4
-  call $~lib/typedarray/Int8Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8>
   local.tee $0
   i32.const 0
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int8Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8>
+  local.tee $23
+  local.set $22
+  local.get $23
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   i32.load offset=8
   i32.const 3
@@ -26449,7 +32374,10 @@
    unreachable
   end
   local.get $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $0
+  i32.load
+  i32.sub
   i32.const 1
   i32.ne
   if
@@ -26479,53 +32407,116 @@
   i32.const 1712
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $25
+  local.tee $23
+  call $std/typedarray/isInt8ArrayEqual
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 1312
+   i32.const 168
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 5
+  i32.const 0
+  i32.const 14
+  i32.const 1744
+  call $~lib/rt/__allocArray
+  call $~lib/rt/pure/__retain
+  local.tee $22
   call $std/typedarray/isInt8ArrayEqual
   i32.eqz
   if
-   i32.const 0
-   i32.const 1312
-   i32.const 168
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   i32.const 0
+   i32.const 1312
+   i32.const 169
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $28
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $27
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $26
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $24
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $25
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $23
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $23
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $1
-  i32.const 5
-  i32.const 0
-  i32.const 14
-  i32.const 1744
-  call $~lib/rt/__allocArray
-  call $~lib/rt/pure/__retain
-  local.tee $24
-  call $std/typedarray/isInt8ArrayEqual
-  i32.eqz
+  local.get $22
+  i32.const 8332
+  i32.gt_u
   if
-   i32.const 0
-   i32.const 1312
-   i32.const 169
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
   end
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
-  local.get $28
-  call $~lib/rt/pure/__release
-  local.get $27
-  call $~lib/rt/pure/__release
-  local.get $26
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $25
-  call $~lib/rt/pure/__release
-  local.get $24
-  call $~lib/rt/pure/__release
   i32.const 5
   call $~lib/typedarray/Int32Array#constructor
   local.tee $1
@@ -26552,8 +32543,18 @@
   i32.const 1
   i32.const 1
   i32.const 3
-  call $~lib/typedarray/Int32Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  local.set $28
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 2
@@ -26561,7 +32562,7 @@
   i32.const 1776
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $30
+  local.tee $28
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -26576,8 +32577,18 @@
   i32.const 0
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  local.set $27
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 2
@@ -26585,7 +32596,7 @@
   i32.const 1824
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $29
+  local.tee $27
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -26600,8 +32611,18 @@
   i32.const 1
   i32.const 0
   i32.const -3
-  call $~lib/typedarray/Int32Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  local.set $26
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 2
@@ -26609,7 +32630,7 @@
   i32.const 1872
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $28
+  local.tee $26
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -26624,8 +32645,18 @@
   i32.const 2
   i32.const -2
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  local.set $24
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 2
@@ -26633,7 +32664,7 @@
   i32.const 1920
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $27
+  local.tee $24
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -26648,8 +32679,18 @@
   i32.const 0
   i32.const 1
   i32.const 0
-  call $~lib/typedarray/Int32Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32>
+  local.tee $0
+  local.set $25
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $1
   i32.const 5
   i32.const 2
@@ -26657,7 +32698,7 @@
   i32.const 1968
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $26
+  local.tee $25
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -26671,13 +32712,23 @@
   local.get $1
   i32.const 1
   i32.const 4
-  call $~lib/typedarray/Int32Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32>
   local.tee $0
   i32.const 0
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#fill
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32>
+  local.tee $23
+  local.set $22
+  local.get $23
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
   i32.load offset=8
   i32.const 2
@@ -26693,7 +32744,10 @@
    unreachable
   end
   local.get $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $0
+  i32.load
+  i32.sub
   i32.const 4
   i32.ne
   if
@@ -26723,7 +32777,7 @@
   i32.const 2016
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $25
+  local.tee $23
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -26741,7 +32795,7 @@
   i32.const 2048
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $24
+  local.tee $22
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -26753,23 +32807,86 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $28
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $27
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $26
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $25
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $24
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $25
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $23
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $23
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $22
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 6
   call $~lib/typedarray/Int8Array#constructor
   local.tee $1
@@ -26799,7 +32916,7 @@
   local.get $1
   i32.const 1
   i32.const 6
-  call $~lib/typedarray/Int8Array#subarray
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Int8Array#__get
@@ -26826,7 +32943,10 @@
    unreachable
   end
   local.get $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $0
+  i32.load
+  i32.sub
   i32.const 1
   i32.ne
   if
@@ -26852,8 +32972,8 @@
   local.get $0
   i32.const 1
   i32.const 5
-  call $~lib/typedarray/Int8Array#subarray
-  local.tee $30
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8>
+  local.tee $28
   i32.const 0
   call $~lib/typedarray/Int8Array#__get
   i32.const 3
@@ -26866,7 +32986,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.load offset=8
   i32.const 4
   i32.ne
@@ -26878,8 +32998,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  local.get $28
+  i32.load offset=4
+  local.get $28
+  i32.load
+  i32.sub
   i32.const 2
   i32.ne
   if
@@ -26890,7 +33013,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.load offset=8
   i32.const 4
   i32.ne
@@ -26902,11 +33025,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 1
   i32.const 4
-  call $~lib/typedarray/Int8Array#subarray
-  local.tee $29
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8>
+  local.tee $27
   i32.const 0
   call $~lib/typedarray/Int8Array#__get
   i32.const 4
@@ -26919,7 +33042,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $29
+  local.get $27
   i32.load offset=8
   i32.const 3
   i32.ne
@@ -26931,8 +33054,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $29
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  local.get $27
+  i32.load offset=4
+  local.get $27
+  i32.load
+  i32.sub
   i32.const 3
   i32.ne
   if
@@ -26943,7 +33069,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $29
+  local.get $27
   i32.load offset=8
   i32.const 3
   i32.ne
@@ -26956,53 +33082,81 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $0
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $28
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $27
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 5
   call $~lib/typedarray/Int32Array#constructor
-  local.tee $1
+  local.tee $0
   i32.const 0
   i32.const 1
   call $~lib/typedarray/Int32Array#__set
-  local.get $1
+  local.get $0
   i32.const 1
   i32.const 2
   call $~lib/typedarray/Int32Array#__set
-  local.get $1
+  local.get $0
   i32.const 2
   i32.const 3
   call $~lib/typedarray/Int32Array#__set
-  local.get $1
+  local.get $0
   i32.const 3
   i32.const 4
   call $~lib/typedarray/Int32Array#__set
-  local.get $1
+  local.get $0
   i32.const 4
   i32.const 5
   call $~lib/typedarray/Int32Array#__set
-  local.get $1
+  local.get $0
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.set $30
-  local.get $1
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.set $28
+  local.get $0
   i32.const 0
   i32.const 3
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#copyWithin
-  local.tee $28
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
+  local.tee $27
   i32.const 5
   i32.const 2
   i32.const 15
   i32.const 2096
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $27
+  local.tee $26
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -27013,19 +33167,26 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.set $0
-  local.get $1
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.set $1
   local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
   i32.const 1
   i32.const 3
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#copyWithin
-  local.tee $26
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
+  local.tee $24
   i32.const 5
   i32.const 2
   i32.const 15
@@ -27043,26 +33204,32 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.set $29
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $29
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const 1
   i32.const 2
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#copyWithin
-  local.tee $24
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
+  local.tee $23
   i32.const 5
   i32.const 2
   i32.const 15
   i32.const 2192
   call $~lib/rt/__allocArray
   call $~lib/rt/pure/__retain
-  local.tee $19
+  local.tee $22
   call $std/typedarray/isInt32ArrayEqual
   i32.eqz
   if
@@ -27073,18 +33240,25 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $29
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const 2
   i32.const 2
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#copyWithin
-  local.tee $29
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
+  local.tee $19
   i32.const 5
   i32.const 2
   i32.const 15
@@ -27102,17 +33276,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const 0
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int32Array#copyWithin
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
   local.tee $17
   i32.const 5
   i32.const 2
@@ -27131,17 +33312,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const 1
   i32.const 3
   i32.const 4
-  call $~lib/typedarray/Int32Array#copyWithin
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
   local.tee $14
   i32.const 5
   i32.const 2
@@ -27160,17 +33348,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const 1
   i32.const 2
   i32.const 4
-  call $~lib/typedarray/Int32Array#copyWithin
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
   local.tee $12
   i32.const 5
   i32.const 2
@@ -27189,17 +33384,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const 0
   i32.const -2
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#copyWithin
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
   local.tee $10
   i32.const 5
   i32.const 2
@@ -27218,17 +33420,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const 0
   i32.const -2
   i32.const -1
-  call $~lib/typedarray/Int32Array#copyWithin
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
   local.tee $8
   i32.const 5
   i32.const 2
@@ -27247,17 +33456,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const -4
   i32.const -3
   i32.const -2
-  call $~lib/typedarray/Int32Array#copyWithin
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
   local.tee $6
   i32.const 5
   i32.const 2
@@ -27276,17 +33492,24 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.tee $0
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.tee $1
   i32.const -4
   i32.const -3
   i32.const -1
-  call $~lib/typedarray/Int32Array#copyWithin
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
   local.tee $4
   i32.const 5
   i32.const 2
@@ -27305,19 +33528,26 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.set $1
-  local.get $0
-  call $~lib/rt/pure/__release
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.set $0
   local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
   i32.const -4
   i32.const -3
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#copyWithin
-  local.tee $0
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
+  local.tee $1
   i32.const 5
   i32.const 2
   i32.const 15
@@ -27335,58 +33565,240 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $28
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $27
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $26
-  call $~lib/rt/pure/__release
-  local.get $25
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $24
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $24
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $25
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $25
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $23
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $23
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $22
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $22
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $19
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $19
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $18
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $18
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $17
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $17
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $15
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $15
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $14
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $14
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $13
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $13
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $12
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $12
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $11
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $11
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $10
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $10
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $9
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $9
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $8
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $8
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $7
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $7
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $6
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $6
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $5
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $5
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $4
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $4
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $3
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $3
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $1
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $2
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $2
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   i32.const 5
   call $~lib/typedarray/Int32Array#constructor
   local.tee $1
@@ -27412,8 +33824,8 @@
   local.get $1
   i32.const 1
   i32.const 4
-  call $~lib/typedarray/Int32Array#subarray
-  local.tee $30
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32>
+  local.tee $28
   i32.load offset=8
   i32.const 2
   i32.shr_u
@@ -27427,8 +33839,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  local.get $28
+  i32.load offset=4
+  local.get $28
+  i32.load
+  i32.sub
   i32.const 4
   i32.ne
   if
@@ -27439,7 +33854,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.load offset=8
   i32.const 12
   i32.ne
@@ -27454,7 +33869,7 @@
   local.get $1
   i32.const 1
   i32.const 3
-  call $~lib/typedarray/Int32Array#slice
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
   local.tee $0
   i32.const 0
   call $~lib/typedarray/Int32Array#__get
@@ -27496,7 +33911,10 @@
    unreachable
   end
   local.get $0
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $0
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -27517,11 +33935,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $30
+  local.get $28
   i32.const 1
   i32.const 2
-  call $~lib/typedarray/Int32Array#slice
-  local.tee $29
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.tee $27
   i32.const 0
   call $~lib/typedarray/Int32Array#__get
   i32.const 3
@@ -27534,7 +33952,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $29
+  local.get $27
   i32.load offset=8
   i32.const 2
   i32.shr_u
@@ -27548,8 +33966,11 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $29
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  local.get $27
+  i32.load offset=4
+  local.get $27
+  i32.load
+  i32.sub
   if
    i32.const 0
    i32.const 1312
@@ -27558,7 +33979,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $29
+  local.get $27
   i32.load offset=8
   i32.const 4
   i32.ne
@@ -27574,8 +33995,8 @@
   local.get $1
   i32.const 0
   i32.const 2147483647
-  call $~lib/typedarray/Int32Array#slice
-  local.tee $28
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+  local.tee $26
   i32.eq
   if
    i32.const 0
@@ -27585,7 +34006,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $28
+  local.get $26
   i32.load offset=8
   i32.const 2
   i32.shr_u
@@ -27602,10 +34023,16 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $28
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  local.get $26
+  i32.load offset=4
+  local.get $26
+  i32.load
+  i32.sub
   local.get $1
-  call $~lib/arraybuffer/ArrayBufferView#get:byteOffset
+  i32.load offset=4
+  local.get $1
+  i32.load
+  i32.sub
   i32.ne
   if
    i32.const 0
@@ -27615,7 +34042,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $28
+  local.get $26
   i32.load offset=8
   local.get $1
   i32.load offset=8
@@ -27629,55 +34056,88 @@
    unreachable
   end
   local.get $1
-  call $~lib/rt/pure/__release
-  local.get $30
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $29
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
   local.get $28
-  call $~lib/rt/pure/__release
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $28
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $0
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $27
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $27
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  local.get $26
+  i32.const 8332
+  i32.gt_u
+  if
+   local.get $26
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+  i32.const 0
+  local.set $0
+  i32.const 0
+  local.set $28
   i32.const 3
   call $~lib/typedarray/Int8Array#constructor
-  local.tee $30
+  local.tee $1
   i32.const 0
   i32.const 1
   call $~lib/typedarray/Int8Array#__set
-  local.get $30
+  local.get $1
   i32.const 1
   i32.const 2
   call $~lib/typedarray/Int8Array#__set
-  local.get $30
+  local.get $1
   i32.const 2
   i32.const 3
   call $~lib/typedarray/Int8Array#__set
-  i32.const 0
-  local.set $0
-  i32.const 0
-  local.set $1
-  local.get $30
+  local.get $1
   i32.load offset=4
-  local.set $29
-  local.get $30
+  local.set $27
+  local.get $1
   i32.load offset=8
-  local.set $28
+  local.set $26
   loop $for-loop|0
    local.get $0
-   local.get $28
+   local.get $26
    i32.lt_s
    if
     local.get $0
-    local.get $29
+    local.get $27
     i32.add
     i32.load8_s
-    local.set $27
     i32.const 4
     global.set $~argumentsLength
-    local.get $1
-    local.get $27
+    local.get $28
     i32.add
-    local.set $1
+    local.set $28
     local.get $0
     i32.const 1
     i32.add
@@ -27685,4452 +34145,2505 @@
     br $for-loop|0
    end
   end
-  block $folding-inner19
-   block $folding-inner18
-    block $folding-inner0
-     block $folding-inner17
-      block $folding-inner16
-       block $folding-inner13
-        block $folding-inner12
-         block $folding-inner11
-          block $folding-inner10
-           block $folding-inner9
-            block $folding-inner8
-             block $folding-inner7
-              block $folding-inner6
-               block $folding-inner5
-                block $folding-inner4
-                 block $folding-inner3
-                  block $folding-inner2
-                   local.get $1
-                   i32.const 255
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner2
-                   local.get $30
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint8Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Uint8Array#__set
-                   local.get $1
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Uint8Array#__set
-                   local.get $1
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Uint8Array#__set
-                   local.get $1
-                   i32.const 3
-                   call $~lib/typedarray/Uint8Array#reduce<u8>
-                   i32.const 255
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint8ClampedArray#constructor
-                   local.tee $1
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Uint8ClampedArray#__set
-                   local.get $1
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Uint8ClampedArray#__set
-                   local.get $1
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Uint8ClampedArray#__set
-                   local.get $1
-                   i32.const 4
-                   call $~lib/typedarray/Uint8Array#reduce<u8>
-                   i32.const 255
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Int16Array#constructor
-                   local.tee $30
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Int16Array#__set
-                   local.get $30
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Int16Array#__set
-                   local.get $30
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Int16Array#__set
-                   i32.const 0
-                   local.set $0
-                   i32.const 0
-                   local.set $1
-                   local.get $30
-                   i32.load offset=4
-                   local.set $29
-                   local.get $30
-                   i32.load offset=8
-                   i32.const 1
-                   i32.shr_u
-                   local.set $28
-                   loop $for-loop|00
-                    local.get $0
-                    local.get $28
-                    i32.lt_s
-                    if
-                     local.get $29
-                     local.get $0
-                     i32.const 1
-                     i32.shl
-                     i32.add
-                     i32.load16_s
-                     local.set $27
-                     i32.const 4
-                     global.set $~argumentsLength
-                     local.get $1
-                     local.get $27
-                     i32.add
-                     local.set $1
-                     local.get $0
-                     i32.const 1
-                     i32.add
-                     local.set $0
-                     br $for-loop|00
-                    end
-                   end
-                   local.get $1
-                   i32.const 65535
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner2
-                   local.get $30
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint16Array#constructor
-                   local.tee $30
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Uint16Array#__set
-                   local.get $30
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Uint16Array#__set
-                   local.get $30
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Uint16Array#__set
-                   i32.const 0
-                   local.set $0
-                   i32.const 0
-                   local.set $1
-                   local.get $30
-                   i32.load offset=4
-                   local.set $29
-                   local.get $30
-                   i32.load offset=8
-                   i32.const 1
-                   i32.shr_u
-                   local.set $28
-                   loop $for-loop|01
-                    local.get $0
-                    local.get $28
-                    i32.lt_s
-                    if
-                     local.get $29
-                     local.get $0
-                     i32.const 1
-                     i32.shl
-                     i32.add
-                     i32.load16_u
-                     local.set $27
-                     i32.const 4
-                     global.set $~argumentsLength
-                     local.get $1
-                     local.get $27
-                     i32.add
-                     local.set $1
-                     local.get $0
-                     i32.const 1
-                     i32.add
-                     local.set $0
-                     br $for-loop|01
-                    end
-                   end
-                   local.get $1
-                   i32.const 65535
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner2
-                   local.get $30
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Int32Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Int32Array#__set
-                   local.get $1
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Int32Array#__set
-                   local.get $1
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Int32Array#__set
-                   local.get $1
-                   i32.const 7
-                   call $~lib/typedarray/Int32Array#reduce<i32>
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint32Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Uint32Array#__set
-                   local.get $1
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Uint32Array#__set
-                   local.get $1
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Uint32Array#__set
-                   local.get $1
-                   i32.const 8
-                   call $~lib/typedarray/Int32Array#reduce<i32>
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Int64Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   i64.const 1
-                   call $~lib/typedarray/Int64Array#__set
-                   local.get $1
-                   i32.const 1
-                   i64.const 2
-                   call $~lib/typedarray/Int64Array#__set
-                   local.get $1
-                   i32.const 2
-                   i64.const 3
-                   call $~lib/typedarray/Int64Array#__set
-                   local.get $1
-                   i32.const 9
-                   call $~lib/typedarray/Int64Array#reduce<i64>
-                   i64.const 6
-                   i64.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint64Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   i64.const 1
-                   call $~lib/typedarray/Uint64Array#__set
-                   local.get $1
-                   i32.const 1
-                   i64.const 2
-                   call $~lib/typedarray/Uint64Array#__set
-                   local.get $1
-                   i32.const 2
-                   i64.const 3
-                   call $~lib/typedarray/Uint64Array#__set
-                   local.get $1
-                   i32.const 10
-                   call $~lib/typedarray/Int64Array#reduce<i64>
-                   i64.const 6
-                   i64.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Float32Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   f32.const 1
-                   call $~lib/typedarray/Float32Array#__set
-                   local.get $1
-                   i32.const 1
-                   f32.const 2
-                   call $~lib/typedarray/Float32Array#__set
-                   local.get $1
-                   i32.const 2
-                   f32.const 3
-                   call $~lib/typedarray/Float32Array#__set
-                   i32.const 0
-                   local.set $0
-                   local.get $1
-                   i32.load offset=4
-                   local.set $30
-                   local.get $1
-                   i32.load offset=8
-                   i32.const 2
-                   i32.shr_u
-                   local.set $29
-                   loop $for-loop|02
-                    local.get $0
-                    local.get $29
-                    i32.lt_s
-                    if
-                     local.get $30
-                     local.get $0
-                     i32.const 2
-                     i32.shl
-                     i32.add
-                     f32.load
-                     local.set $16
-                     i32.const 4
-                     global.set $~argumentsLength
-                     local.get $22
-                     local.get $16
-                     f32.add
-                     local.set $22
-                     local.get $0
-                     i32.const 1
-                     i32.add
-                     local.set $0
-                     br $for-loop|02
-                    end
-                   end
-                   local.get $22
-                   f32.const 6
-                   f32.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Float64Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   f64.const 1
-                   call $~lib/typedarray/Float64Array#__set
-                   local.get $1
-                   i32.const 1
-                   f64.const 2
-                   call $~lib/typedarray/Float64Array#__set
-                   local.get $1
-                   i32.const 2
-                   f64.const 3
-                   call $~lib/typedarray/Float64Array#__set
-                   i32.const 0
-                   local.set $0
-                   f64.const 0
-                   local.set $23
-                   local.get $1
-                   i32.load offset=4
-                   local.set $30
-                   local.get $1
-                   i32.load offset=8
-                   i32.const 3
-                   i32.shr_u
-                   local.set $29
-                   loop $for-loop|03
-                    local.get $0
-                    local.get $29
-                    i32.lt_s
-                    if
-                     local.get $30
-                     local.get $0
-                     i32.const 3
-                     i32.shl
-                     i32.add
-                     f64.load
-                     local.set $21
-                     i32.const 4
-                     global.set $~argumentsLength
-                     local.get $23
-                     local.get $21
-                     f64.add
-                     local.set $23
-                     local.get $0
-                     i32.const 1
-                     i32.add
-                     local.set $0
-                     br $for-loop|03
-                    end
-                   end
-                   local.get $23
-                   f64.const 6
-                   f64.ne
-                   br_if $folding-inner2
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Int8Array#constructor
-                   local.tee $30
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Int8Array#__set
-                   local.get $30
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Int8Array#__set
-                   local.get $30
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Int8Array#__set
-                   i32.const 0
-                   local.set $0
-                   local.get $30
-                   i32.load offset=4
-                   local.set $29
-                   local.get $30
-                   i32.load offset=8
-                   i32.const 1
-                   i32.sub
-                   local.set $1
-                   loop $for-loop|04
-                    local.get $1
-                    i32.const 0
-                    i32.ge_s
-                    if
-                     local.get $1
-                     local.get $29
-                     i32.add
-                     i32.load8_s
-                     local.set $28
-                     i32.const 4
-                     global.set $~argumentsLength
-                     local.get $0
-                     local.get $28
-                     i32.add
-                     local.set $0
-                     local.get $1
-                     i32.const 1
-                     i32.sub
-                     local.set $1
-                     br $for-loop|04
-                    end
-                   end
-                   local.get $0
-                   i32.const 255
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner3
-                   local.get $30
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint8Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Uint8Array#__set
-                   local.get $1
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Uint8Array#__set
-                   local.get $1
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Uint8Array#__set
-                   local.get $1
-                   i32.const 14
-                   call $~lib/typedarray/Uint8Array#reduceRight<u8>
-                   i32.const 255
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner3
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint8ClampedArray#constructor
-                   local.tee $1
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Uint8ClampedArray#__set
-                   local.get $1
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Uint8ClampedArray#__set
-                   local.get $1
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Uint8ClampedArray#__set
-                   local.get $1
-                   i32.const 15
-                   call $~lib/typedarray/Uint8Array#reduceRight<u8>
-                   i32.const 255
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner3
-                   local.get $1
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Int16Array#constructor
-                   local.tee $30
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Int16Array#__set
-                   local.get $30
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Int16Array#__set
-                   local.get $30
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Int16Array#__set
-                   i32.const 0
-                   local.set $0
-                   local.get $30
-                   i32.load offset=4
-                   local.set $29
-                   local.get $30
-                   i32.load offset=8
-                   i32.const 1
-                   i32.shr_u
-                   i32.const 1
-                   i32.sub
-                   local.set $1
-                   loop $for-loop|05
-                    local.get $1
-                    i32.const 0
-                    i32.ge_s
-                    if
-                     local.get $29
-                     local.get $1
-                     i32.const 1
-                     i32.shl
-                     i32.add
-                     i32.load16_s
-                     local.set $28
-                     i32.const 4
-                     global.set $~argumentsLength
-                     local.get $0
-                     local.get $28
-                     i32.add
-                     local.set $0
-                     local.get $1
-                     i32.const 1
-                     i32.sub
-                     local.set $1
-                     br $for-loop|05
-                    end
-                   end
-                   local.get $0
-                   i32.const 65535
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner3
-                   local.get $30
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Uint16Array#constructor
-                   local.tee $30
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Uint16Array#__set
-                   local.get $30
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Uint16Array#__set
-                   local.get $30
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Uint16Array#__set
-                   i32.const 0
-                   local.set $0
-                   local.get $30
-                   i32.load offset=4
-                   local.set $29
-                   local.get $30
-                   i32.load offset=8
-                   i32.const 1
-                   i32.shr_u
-                   i32.const 1
-                   i32.sub
-                   local.set $1
-                   loop $for-loop|06
-                    local.get $1
-                    i32.const 0
-                    i32.ge_s
-                    if
-                     local.get $29
-                     local.get $1
-                     i32.const 1
-                     i32.shl
-                     i32.add
-                     i32.load16_u
-                     local.set $28
-                     i32.const 4
-                     global.set $~argumentsLength
-                     local.get $0
-                     local.get $28
-                     i32.add
-                     local.set $0
-                     local.get $1
-                     i32.const 1
-                     i32.sub
-                     local.set $1
-                     br $for-loop|06
-                    end
-                   end
-                   local.get $0
-                   i32.const 65535
-                   i32.and
-                   i32.const 6
-                   i32.ne
-                   br_if $folding-inner3
-                   local.get $30
-                   call $~lib/rt/pure/__release
-                   i32.const 3
-                   call $~lib/typedarray/Int32Array#constructor
-                   local.tee $1
-                   i32.const 0
-                   i32.const 1
-                   call $~lib/typedarray/Int32Array#__set
-                   local.get $1
-                   i32.const 1
-                   i32.const 2
-                   call $~lib/typedarray/Int32Array#__set
-                   local.get $1
-                   i32.const 2
-                   i32.const 3
-                   call $~lib/typedarray/Int32Array#__set
-                   block $folding-inner1
-                    local.get $1
-                    i32.const 18
-                    call $~lib/typedarray/Int32Array#reduceRight<i32>
-                    i32.const 6
-                    i32.ne
-                    br_if $folding-inner1
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 19
-                    call $~lib/typedarray/Int32Array#reduceRight<i32>
-                    i32.const 6
-                    i32.ne
-                    br_if $folding-inner1
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 20
-                    call $~lib/typedarray/Int64Array#reduceRight<i64>
-                    i64.const 6
-                    i64.ne
-                    br_if $folding-inner1
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 21
-                    call $~lib/typedarray/Int64Array#reduceRight<i64>
-                    i64.const 6
-                    i64.ne
-                    br_if $folding-inner1
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    f32.const 1
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $0
-                    i32.const 1
-                    f32.const 2
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $0
-                    i32.const 2
-                    f32.const 3
-                    call $~lib/typedarray/Float32Array#__set
-                    f32.const 0
-                    local.set $22
-                    local.get $0
-                    i32.load offset=4
-                    local.set $30
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    i32.const 1
-                    i32.sub
-                    local.set $1
-                    loop $for-loop|07
-                     local.get $1
-                     i32.const 0
-                     i32.ge_s
-                     if
-                      local.get $30
-                      local.get $1
-                      i32.const 2
-                      i32.shl
-                      i32.add
-                      f32.load
-                      local.set $16
-                      i32.const 4
-                      global.set $~argumentsLength
-                      local.get $22
-                      local.get $16
-                      f32.add
-                      local.set $22
-                      local.get $1
-                      i32.const 1
-                      i32.sub
-                      local.set $1
-                      br $for-loop|07
-                     end
-                    end
-                    local.get $22
-                    f32.const 6
-                    f32.ne
-                    br_if $folding-inner1
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    f64.const 1
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $0
-                    i32.const 1
-                    f64.const 2
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $0
-                    i32.const 2
-                    f64.const 3
-                    call $~lib/typedarray/Float64Array#__set
-                    f64.const 0
-                    local.set $23
-                    local.get $0
-                    i32.load offset=4
-                    local.set $30
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 3
-                    i32.shr_u
-                    i32.const 1
-                    i32.sub
-                    local.set $1
-                    loop $for-loop|08
-                     local.get $1
-                     i32.const 0
-                     i32.ge_s
-                     if
-                      local.get $30
-                      local.get $1
-                      i32.const 3
-                      i32.shl
-                      i32.add
-                      f64.load
-                      local.set $21
-                      i32.const 4
-                      global.set $~argumentsLength
-                      local.get $23
-                      local.get $21
-                      f64.add
-                      local.set $23
-                      local.get $1
-                      i32.const 1
-                      i32.sub
-                      local.set $1
-                      br $for-loop|08
-                     end
-                    end
-                    local.get $23
-                    f64.const 6
-                    f64.ne
-                    br_if $folding-inner1
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    local.set $29
-                    local.get $0
-                    i32.load offset=4
-                    local.set $26
-                    i32.const 12
-                    i32.const 3
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $29
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $28
-                    loop $for-loop|09
-                     local.get $1
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $1
-                      local.get $26
-                      i32.add
-                      i32.load8_s
-                      local.set $27
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $1
-                      local.get $28
-                      i32.add
-                      local.get $27
-                      local.get $27
-                      i32.mul
-                      i32.store8
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|09
-                     end
-                    end
-                    local.get $30
-                    local.get $28
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $28
-                    i32.store offset=4
-                    local.get $30
-                    local.get $29
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Int8Array#__get
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Int8Array#__get
-                    i32.const 4
-                    i32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Int8Array#__get
-                    i32.const 9
-                    i32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    local.set $29
-                    local.get $0
-                    i32.load offset=4
-                    local.set $26
-                    i32.const 12
-                    i32.const 4
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $29
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $28
-                    loop $for-loop|010
-                     local.get $1
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $1
-                      local.get $26
-                      i32.add
-                      i32.load8_u
-                      local.set $27
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $1
-                      local.get $28
-                      i32.add
-                      local.get $27
-                      local.get $27
-                      i32.mul
-                      i32.store8
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|010
-                     end
-                    end
-                    local.get $30
-                    local.get $28
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $28
-                    i32.store offset=4
-                    local.get $30
-                    local.get $29
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Uint8Array#__get
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Uint8Array#__get
-                    i32.const 4
-                    i32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8Array#__get
-                    i32.const 9
-                    i32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#constructor
-                    local.tee $0
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    local.set $29
-                    local.get $0
-                    i32.load offset=4
-                    local.set $26
-                    i32.const 12
-                    i32.const 5
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $29
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $28
-                    loop $for-loop|011
-                     local.get $1
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $1
-                      local.get $26
-                      i32.add
-                      i32.load8_u
-                      local.set $27
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $1
-                      local.get $28
-                      i32.add
-                      local.get $27
-                      local.get $27
-                      i32.mul
-                      i32.store8
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|011
-                     end
-                    end
-                    local.get $30
-                    local.get $28
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $28
-                    i32.store offset=4
-                    local.get $30
-                    local.get $29
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Uint8ClampedArray#__get
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Uint8ClampedArray#__get
-                    i32.const 4
-                    i32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8ClampedArray#__get
-                    i32.const 9
-                    i32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 1
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $26
-                    i32.const 12
-                    i32.const 6
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 1
-                    i32.shl
-                    local.tee $25
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|012
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $26
-                      local.get $1
-                      i32.const 1
-                      i32.shl
-                      local.tee $24
-                      i32.add
-                      i32.load16_s
-                      local.set $27
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $24
-                      local.get $29
-                      i32.add
-                      local.get $27
-                      local.get $27
-                      i32.mul
-                      i32.store16
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|012
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $25
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Int16Array#__get
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Int16Array#__get
-                    i32.const 4
-                    i32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Int16Array#__get
-                    i32.const 9
-                    i32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 1
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $26
-                    i32.const 12
-                    i32.const 7
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 1
-                    i32.shl
-                    local.tee $25
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|013
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $26
-                      local.get $1
-                      i32.const 1
-                      i32.shl
-                      local.tee $24
-                      i32.add
-                      i32.load16_u
-                      local.set $27
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $24
-                      local.get $29
-                      i32.add
-                      local.get $27
-                      local.get $27
-                      i32.mul
-                      i32.store16
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|013
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $25
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Uint16Array#__get
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Uint16Array#__get
-                    i32.const 4
-                    i32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Uint16Array#__get
-                    i32.const 9
-                    i32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $26
-                    i32.const 12
-                    i32.const 8
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 2
-                    i32.shl
-                    local.tee $25
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|014
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $26
-                      local.get $1
-                      i32.const 2
-                      i32.shl
-                      local.tee $24
-                      i32.add
-                      i32.load
-                      local.set $27
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $24
-                      local.get $29
-                      i32.add
-                      local.get $27
-                      local.get $27
-                      i32.mul
-                      i32.store
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|014
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $25
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Int32Array#__get
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Int32Array#__get
-                    i32.const 4
-                    i32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Int32Array#__get
-                    i32.const 9
-                    i32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $26
-                    i32.const 12
-                    i32.const 9
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 2
-                    i32.shl
-                    local.tee $25
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|015
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $26
-                      local.get $1
-                      i32.const 2
-                      i32.shl
-                      local.tee $24
-                      i32.add
-                      i32.load
-                      local.set $27
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $24
-                      local.get $29
-                      i32.add
-                      local.get $27
-                      local.get $27
-                      i32.mul
-                      i32.store
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|015
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $25
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Uint32Array#__get
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Uint32Array#__get
-                    i32.const 4
-                    i32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Uint32Array#__get
-                    i32.const 9
-                    i32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $0
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $0
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Int64Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 3
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $27
-                    i32.const 12
-                    i32.const 10
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 3
-                    i32.shl
-                    local.tee $26
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|016
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $27
-                      local.get $1
-                      i32.const 3
-                      i32.shl
-                      local.tee $25
-                      i32.add
-                      i64.load
-                      local.set $20
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $25
-                      local.get $29
-                      i32.add
-                      local.get $20
-                      local.get $20
-                      i64.mul
-                      i64.store
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|016
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $26
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Int64Array#__get
-                    i64.const 1
-                    i64.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Int64Array#__get
-                    i64.const 4
-                    i64.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Int64Array#__get
-                    i64.const 9
-                    i64.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint64Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $0
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $0
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Uint64Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 3
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $27
-                    i32.const 12
-                    i32.const 11
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 3
-                    i32.shl
-                    local.tee $26
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|017
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $27
-                      local.get $1
-                      i32.const 3
-                      i32.shl
-                      local.tee $25
-                      i32.add
-                      i64.load
-                      local.set $20
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $25
-                      local.get $29
-                      i32.add
-                      local.get $20
-                      local.get $20
-                      i64.mul
-                      i64.store
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|017
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $26
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Uint64Array#__get
-                    i64.const 1
-                    i64.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Uint64Array#__get
-                    i64.const 4
-                    i64.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Uint64Array#__get
-                    i64.const 9
-                    i64.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    f32.const 1
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $0
-                    i32.const 1
-                    f32.const 2
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $0
-                    i32.const 2
-                    f32.const 3
-                    call $~lib/typedarray/Float32Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $27
-                    i32.const 12
-                    i32.const 12
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 2
-                    i32.shl
-                    local.tee $26
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|018
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $27
-                      local.get $1
-                      i32.const 2
-                      i32.shl
-                      local.tee $25
-                      i32.add
-                      f32.load
-                      local.set $22
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $25
-                      local.get $29
-                      i32.add
-                      local.get $22
-                      local.get $22
-                      f32.mul
-                      f32.store
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|018
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $26
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Float32Array#__get
-                    f32.const 1
-                    f32.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Float32Array#__get
-                    f32.const 4
-                    f32.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Float32Array#__get
-                    f32.const 9
-                    f32.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $0
-                    i32.const 0
-                    f64.const 1
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $0
-                    i32.const 1
-                    f64.const 2
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $0
-                    i32.const 2
-                    f64.const 3
-                    call $~lib/typedarray/Float64Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 3
-                    i32.shr_u
-                    local.set $28
-                    local.get $0
-                    i32.load offset=4
-                    local.set $27
-                    i32.const 12
-                    i32.const 13
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $30
-                    local.get $28
-                    i32.const 3
-                    i32.shl
-                    local.tee $26
-                    i32.const 0
-                    call $~lib/rt/tlsf/__alloc
-                    local.set $29
-                    loop $for-loop|019
-                     local.get $1
-                     local.get $28
-                     i32.lt_s
-                     if
-                      local.get $27
-                      local.get $1
-                      i32.const 3
-                      i32.shl
-                      local.tee $25
-                      i32.add
-                      f64.load
-                      local.set $23
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $25
-                      local.get $29
-                      i32.add
-                      local.get $23
-                      local.get $23
-                      f64.mul
-                      f64.store
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|019
-                     end
-                    end
-                    local.get $30
-                    local.get $29
-                    call $~lib/rt/pure/__retain
-                    i32.store
-                    local.get $30
-                    local.get $29
-                    i32.store offset=4
-                    local.get $30
-                    local.get $26
-                    i32.store offset=8
-                    local.get $30
-                    call $~lib/rt/pure/__retain
-                    local.tee $1
-                    i32.const 0
-                    call $~lib/typedarray/Float64Array#__get
-                    f64.const 1
-                    f64.ne
-                    br_if $folding-inner4
-                    local.get $1
-                    i32.const 1
-                    call $~lib/typedarray/Float64Array#__get
-                    f64.const 4
-                    f64.ne
-                    br_if $folding-inner5
-                    local.get $1
-                    i32.const 2
-                    call $~lib/typedarray/Float64Array#__get
-                    f64.const 9
-                    f64.ne
-                    br_if $folding-inner6
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>
-                    call $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 46
-                    call $~lib/typedarray/Int8Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 47
-                    call $~lib/typedarray/Int8Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 48
-                    call $~lib/typedarray/Uint8Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 49
-                    call $~lib/typedarray/Uint8Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 50
-                    call $~lib/typedarray/Uint8Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 51
-                    call $~lib/typedarray/Uint8Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 52
-                    call $~lib/typedarray/Int16Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 53
-                    call $~lib/typedarray/Int16Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 54
-                    call $~lib/typedarray/Uint16Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 55
-                    call $~lib/typedarray/Uint16Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 56
-                    call $~lib/typedarray/Int32Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 57
-                    call $~lib/typedarray/Int32Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 58
-                    call $~lib/typedarray/Int32Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 59
-                    call $~lib/typedarray/Int32Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 2
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 4
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 6
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 60
-                    call $~lib/typedarray/Int64Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 61
-                    call $~lib/typedarray/Int64Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 2
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 4
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 6
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 62
-                    call $~lib/typedarray/Int64Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 63
-                    call $~lib/typedarray/Int64Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f32.const 2
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 1
-                    f32.const 4
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 2
-                    f32.const 6
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 64
-                    call $~lib/typedarray/Float32Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 65
-                    call $~lib/typedarray/Float32Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f64.const 2
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 1
-                    f64.const 4
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 2
-                    f64.const 6
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 66
-                    call $~lib/typedarray/Float64Array#some
-                    i32.eqz
-                    br_if $folding-inner7
-                    local.get $1
-                    i32.const 67
-                    call $~lib/typedarray/Float64Array#some
-                    br_if $folding-inner8
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 68
-                    call $~lib/typedarray/Int8Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 69
-                    call $~lib/typedarray/Int8Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 70
-                    call $~lib/typedarray/Uint8Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 71
-                    call $~lib/typedarray/Uint8Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 72
-                    call $~lib/typedarray/Uint8Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 73
-                    call $~lib/typedarray/Uint8Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 74
-                    call $~lib/typedarray/Int16Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 75
-                    call $~lib/typedarray/Int16Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 76
-                    call $~lib/typedarray/Uint16Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 77
-                    call $~lib/typedarray/Uint16Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 78
-                    call $~lib/typedarray/Int32Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 79
-                    call $~lib/typedarray/Int32Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 80
-                    call $~lib/typedarray/Int32Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 81
-                    call $~lib/typedarray/Int32Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 82
-                    call $~lib/typedarray/Int64Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 83
-                    call $~lib/typedarray/Int64Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 84
-                    call $~lib/typedarray/Int64Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 85
-                    call $~lib/typedarray/Int64Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f32.const 1
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 1
-                    f32.const 2
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 2
-                    f32.const 3
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 86
-                    call $~lib/typedarray/Float32Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 87
-                    call $~lib/typedarray/Float32Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f64.const 1
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 1
-                    f64.const 2
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 2
-                    f64.const 3
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 88
-                    call $~lib/typedarray/Float64Array#findIndex
-                    i32.const 1
-                    i32.ne
-                    br_if $folding-inner9
-                    local.get $1
-                    i32.const 89
-                    call $~lib/typedarray/Float64Array#findIndex
-                    i32.const -1
-                    i32.ne
-                    br_if $folding-inner10
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 90
-                    call $~lib/typedarray/Int8Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 91
-                    call $~lib/typedarray/Int8Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 92
-                    call $~lib/typedarray/Uint8Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 93
-                    call $~lib/typedarray/Uint8Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 94
-                    call $~lib/typedarray/Uint8Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 95
-                    call $~lib/typedarray/Uint8Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 96
-                    call $~lib/typedarray/Int16Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 97
-                    call $~lib/typedarray/Int16Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 98
-                    call $~lib/typedarray/Uint16Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 99
-                    call $~lib/typedarray/Uint16Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 100
-                    call $~lib/typedarray/Int32Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 101
-                    call $~lib/typedarray/Int32Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 2
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 4
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 6
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 102
-                    call $~lib/typedarray/Int32Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 103
-                    call $~lib/typedarray/Int32Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 2
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 4
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 6
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 104
-                    call $~lib/typedarray/Int64Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 105
-                    call $~lib/typedarray/Int64Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Uint64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 2
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 4
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 6
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 106
-                    call $~lib/typedarray/Int64Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 107
-                    call $~lib/typedarray/Int64Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f32.const 2
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 1
-                    f32.const 4
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 2
-                    f32.const 6
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 108
-                    call $~lib/typedarray/Float32Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 109
-                    call $~lib/typedarray/Float32Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 3
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f64.const 2
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 1
-                    f64.const 4
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 2
-                    f64.const 6
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 110
-                    call $~lib/typedarray/Float64Array#every
-                    i32.eqz
-                    br_if $folding-inner11
-                    local.get $1
-                    i32.const 111
-                    call $~lib/typedarray/Float64Array#every
-                    br_if $folding-inner12
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#constructor
-                    local.tee $0
-                    global.set $std/typedarray/forEachSelf
-                    local.get $0
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 24
-                    i32.shl
-                    i32.const 24
-                    i32.shr_s
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 24
-                    i32.shl
-                    i32.const 24
-                    i32.shr_s
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 24
-                    i32.shl
-                    i32.const 24
-                    i32.shr_s
-                    call $~lib/typedarray/Int8Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=4
-                    local.set $30
-                    local.get $0
-                    i32.load offset=8
-                    local.set $29
-                    loop $for-loop|020
-                     local.get $1
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $1
-                      local.get $30
-                      i32.add
-                      i32.load8_s
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $1
-                      local.get $0
-                      call $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>~anonymous|0
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|020
-                     end
-                    end
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 255
-                    i32.and
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 255
-                    i32.and
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 255
-                    i32.and
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 113
-                    call $~lib/typedarray/Uint8Array#forEach
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 255
-                    i32.and
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 255
-                    i32.and
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 255
-                    i32.and
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 114
-                    call $~lib/typedarray/Uint8Array#forEach
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#constructor
-                    local.tee $0
-                    global.set $std/typedarray/forEachSelf
-                    local.get $0
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 16
-                    i32.shl
-                    i32.const 16
-                    i32.shr_s
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 16
-                    i32.shl
-                    i32.const 16
-                    i32.shr_s
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 16
-                    i32.shl
-                    i32.const 16
-                    i32.shr_s
-                    call $~lib/typedarray/Int16Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=4
-                    local.set $30
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 1
-                    i32.shr_u
-                    local.set $29
-                    loop $for-loop|021
-                     local.get $1
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $30
-                      local.get $1
-                      i32.const 1
-                      i32.shl
-                      i32.add
-                      i32.load16_s
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $1
-                      local.get $0
-                      call $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|021
-                     end
-                    end
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#constructor
-                    local.tee $0
-                    global.set $std/typedarray/forEachSelf
-                    local.get $0
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 65535
-                    i32.and
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $0
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 65535
-                    i32.and
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $0
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    i32.const 65535
-                    i32.and
-                    call $~lib/typedarray/Uint16Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $0
-                    i32.load offset=4
-                    local.set $30
-                    local.get $0
-                    i32.load offset=8
-                    i32.const 1
-                    i32.shr_u
-                    local.set $29
-                    loop $for-loop|022
-                     local.get $1
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $30
-                      local.get $1
-                      i32.const 1
-                      i32.shl
-                      i32.add
-                      i32.load16_u
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $1
-                      local.get $0
-                      call $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>~anonymous|0
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|022
-                     end
-                    end
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 117
-                    call $~lib/typedarray/Int32Array#forEach
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 118
-                    call $~lib/typedarray/Int32Array#forEach
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    i64.extend_i32_s
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    i64.extend_i32_s
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    i64.extend_i32_s
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 119
-                    call $~lib/typedarray/Int64Array#forEach
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Uint64Array#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    i64.extend_i32_s
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    i64.extend_i32_s
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    i64.extend_i32_s
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 120
-                    call $~lib/typedarray/Int64Array#forEach
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    f32.convert_i32_s
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    f32.convert_i32_s
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    f32.convert_i32_s
-                    call $~lib/typedarray/Float32Array#__set
-                    i32.const 0
-                    local.set $0
-                    local.get $1
-                    i32.load offset=4
-                    local.set $30
-                    local.get $1
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.set $29
-                    loop $for-loop|023
-                     local.get $0
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $30
-                      local.get $0
-                      i32.const 2
-                      i32.shl
-                      i32.add
-                      f32.load
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $0
-                      local.get $1
-                      call $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>~anonymous|0
-                      local.get $0
-                      i32.const 1
-                      i32.add
-                      local.set $0
-                      br $for-loop|023
-                     end
-                    end
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    global.set $std/typedarray/forEachCallCount
-                    i32.const 3
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $1
-                    global.set $std/typedarray/forEachSelf
-                    local.get $1
-                    i32.const 0
-                    i32.const 2704
-                    i32.const 0
-                    call $~lib/array/Array<i32>#__get
-                    f64.convert_i32_s
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2704
-                    i32.const 1
-                    call $~lib/array/Array<i32>#__get
-                    f64.convert_i32_s
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 2704
-                    i32.const 2
-                    call $~lib/array/Array<i32>#__get
-                    f64.convert_i32_s
-                    call $~lib/typedarray/Float64Array#__set
-                    i32.const 0
-                    local.set $0
-                    local.get $1
-                    i32.load offset=4
-                    local.set $30
-                    local.get $1
-                    i32.load offset=8
-                    i32.const 3
-                    i32.shr_u
-                    local.set $29
-                    loop $for-loop|024
-                     local.get $0
-                     local.get $29
-                     i32.lt_s
-                     if
-                      local.get $30
-                      local.get $0
-                      i32.const 3
-                      i32.shl
-                      i32.add
-                      f64.load
-                      i32.const 3
-                      global.set $~argumentsLength
-                      local.get $0
-                      local.get $1
-                      call $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>~anonymous|0
-                      local.get $0
-                      i32.const 1
-                      i32.add
-                      local.set $0
-                      br $for-loop|024
-                     end
-                    end
-                    global.get $std/typedarray/forEachCallCount
-                    i32.const 3
-                    i32.ne
-                    br_if $folding-inner13
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Uint8ClampedArray,u8>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Int16Array,i16>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Uint16Array,u16>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Int32Array,i32>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Uint32Array,u32>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Int64Array,i64>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Uint64Array,u64>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Float32Array,f32>
-                    call $std/typedarray/testArrayReverse<~lib/typedarray/Float64Array,f64>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int8Array,i8>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8Array,u8>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8ClampedArray,u8>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int16Array,i16>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint16Array,u16>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int32Array,i32>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint32Array,u32>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int64Array,i64>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint64Array,u64>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float32Array,f32>
-                    call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float64Array,f64>
-                    i32.const 1
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $30
-                    i32.const 0
-                    f64.const nan:0x8000000000000
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $30
-                    f64.const nan:0x8000000000000
-                    i32.const 0
-                    call $~lib/typedarray/Float64Array#indexOf
-                    i32.const -1
-                    i32.ne
-                    if
-                     i32.const 0
-                     i32.const 1312
-                     i32.const 607
-                     i32.const 3
-                     call $~lib/builtins/abort
-                     unreachable
-                    end
-                    i32.const 0
-                    local.set $0
-                    i32.const 0
-                    local.set $1
-                    block $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0
-                     local.get $30
-                     i32.load offset=8
-                     i32.const 3
-                     i32.shr_u
-                     local.tee $29
-                     if (result i32)
-                      i32.const 0
-                      local.get $29
-                      i32.ge_s
-                     else
-                      i32.const 1
-                     end
-                     br_if $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0
-                     local.get $30
-                     i32.load offset=4
-                     local.set $27
-                     loop $while-continue|0
-                      local.get $0
-                      local.get $29
-                      i32.lt_s
-                      if
-                       local.get $27
-                       local.get $0
-                       i32.const 3
-                       i32.shl
-                       i32.add
-                       f64.load
-                       local.tee $23
-                       f64.const nan:0x8000000000000
-                       f64.eq
-                       if (result i32)
-                        i32.const 1
-                       else
-                        local.get $23
-                        local.get $23
-                        f64.ne
-                       end
-                       if
-                        i32.const 1
-                        local.set $1
-                        br $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0
-                       end
-                       local.get $0
-                       i32.const 1
-                       i32.add
-                       local.set $0
-                       br $while-continue|0
-                      end
-                     end
-                    end
-                    local.get $1
-                    i32.const 0
-                    i32.ne
-                    i32.const 1
-                    i32.ne
-                    if
-                     i32.const 0
-                     i32.const 1312
-                     i32.const 608
-                     i32.const 3
-                     call $~lib/builtins/abort
-                     unreachable
-                    end
-                    i32.const 1
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $29
-                    i32.const 0
-                    f32.const nan:0x400000
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $29
-                    f32.const nan:0x400000
-                    i32.const 0
-                    call $~lib/typedarray/Float32Array#indexOf
-                    i32.const -1
-                    i32.ne
-                    if
-                     i32.const 0
-                     i32.const 1312
-                     i32.const 613
-                     i32.const 3
-                     call $~lib/builtins/abort
-                     unreachable
-                    end
-                    i32.const 0
-                    local.set $1
-                    i32.const 0
-                    local.set $0
-                    block $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0
-                     local.get $29
-                     i32.load offset=8
-                     i32.const 2
-                     i32.shr_u
-                     local.tee $28
-                     if (result i32)
-                      i32.const 0
-                      local.get $28
-                      i32.ge_s
-                     else
-                      i32.const 1
-                     end
-                     br_if $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0
-                     local.get $29
-                     i32.load offset=4
-                     local.set $26
-                     loop $while-continue|025
-                      local.get $1
-                      local.get $28
-                      i32.lt_s
-                      if
-                       local.get $26
-                       local.get $1
-                       i32.const 2
-                       i32.shl
-                       i32.add
-                       f32.load
-                       local.tee $22
-                       f32.const nan:0x400000
-                       f32.eq
-                       if (result i32)
-                        i32.const 1
-                       else
-                        local.get $22
-                        local.get $22
-                        f32.ne
-                       end
-                       if
-                        i32.const 1
-                        local.set $0
-                        br $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0
-                       end
-                       local.get $1
-                       i32.const 1
-                       i32.add
-                       local.set $1
-                       br $while-continue|025
-                      end
-                     end
-                    end
-                    local.get $0
-                    i32.const 0
-                    i32.ne
-                    i32.const 1
-                    i32.ne
-                    if
-                     i32.const 0
-                     i32.const 1312
-                     i32.const 614
-                     i32.const 3
-                     call $~lib/builtins/abort
-                     unreachable
-                    end
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $29
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Int8Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const 4
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    i32.const 4
-                    i32.const 5
-                    call $~lib/typedarray/Int8Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Int8Array#join
-                    local.tee $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    local.get $1
-                    call $~lib/typedarray/Int8Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Uint8Array#constructor
-                    local.tee $1
-                    local.get $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const 4
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    i32.const 4
-                    i32.const 5
-                    call $~lib/typedarray/Uint8Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Uint8Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    call $~lib/typedarray/Uint8Array#join
-                    local.tee $0
-                    local.get $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Uint8ClampedArray#constructor
-                    local.tee $1
-                    local.get $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const 4
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    i32.const 4
-                    i32.const 5
-                    call $~lib/typedarray/Uint8ClampedArray#__set
-                    local.get $1
-                    call $~lib/typedarray/Uint8Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    call $~lib/typedarray/Uint8Array#join
-                    local.tee $0
-                    local.get $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Int16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const 4
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    i32.const 4
-                    i32.const 5
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Int16Array#join
-                    local.tee $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    local.get $1
-                    call $~lib/typedarray/Int16Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Uint16Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const 4
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    i32.const 4
-                    i32.const 5
-                    call $~lib/typedarray/Uint16Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Uint16Array#join
-                    local.tee $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    local.get $1
-                    call $~lib/typedarray/Uint16Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Int32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const 4
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    i32.const 4
-                    i32.const 5
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Int32Array#join
-                    local.tee $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    local.get $1
-                    call $~lib/typedarray/Int32Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 2
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 3
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const 4
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 4
-                    i32.const 5
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Uint32Array#join
-                    local.tee $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    local.get $1
-                    call $~lib/typedarray/Uint32Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 3
-                    i64.const 4
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    i32.const 4
-                    i64.const 5
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Int64Array#join
-                    local.tee $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    local.get $1
-                    call $~lib/typedarray/Int64Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Uint64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i64.const 1
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 1
-                    i64.const 2
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 2
-                    i64.const 3
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 3
-                    i64.const 4
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    i32.const 4
-                    i64.const 5
-                    call $~lib/typedarray/Uint64Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Uint64Array#join
-                    local.tee $0
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner0
-                    local.get $1
-                    call $~lib/typedarray/Uint64Array#join
-                    local.tee $30
-                    i32.const 3008
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner18
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f32.const 1
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 1
-                    f32.const 2
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 2
-                    f32.const 3
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 3
-                    f32.const 4
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    i32.const 4
-                    f32.const 5
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Float32Array#join
-                    local.tee $0
-                    i32.const 4112
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner16
-                    local.get $1
-                    call $~lib/typedarray/Float32Array#join
-                    local.tee $30
-                    i32.const 4112
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner17
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 5
-                    call $~lib/typedarray/Float64Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    f64.const 1
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 1
-                    f64.const 2
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 2
-                    f64.const 3
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 3
-                    f64.const 4
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    i32.const 4
-                    f64.const 5
-                    call $~lib/typedarray/Float64Array#__set
-                    local.get $1
-                    call $~lib/typedarray/Float64Array#join
-                    local.tee $0
-                    i32.const 4112
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner16
-                    local.get $1
-                    call $~lib/typedarray/Float64Array#join
-                    local.tee $30
-                    i32.const 4112
-                    call $~lib/string/String.__eq
-                    i32.eqz
-                    br_if $folding-inner17
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 0
-                    call $~lib/arraybuffer/ArrayBuffer#constructor
-                    local.set $1
-                    i32.const 2
-                    global.set $~argumentsLength
-                    local.get $1
-                    i32.const 0
-                    call $~lib/typedarray/Uint8Array.wrap@varargs
-                    local.tee $30
-                    i32.load offset=8
-                    if
-                     i32.const 0
-                     i32.const 1312
-                     i32.const 691
-                     i32.const 3
-                     call $~lib/builtins/abort
-                     unreachable
-                    end
-                    i32.const 2
-                    call $~lib/arraybuffer/ArrayBuffer#constructor
-                    local.set $0
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    i32.const 2
-                    global.set $~argumentsLength
-                    local.get $0
-                    i32.const 2
-                    call $~lib/typedarray/Uint8Array.wrap@varargs
-                    local.set $1
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    i32.load offset=8
-                    if
-                     i32.const 0
-                     i32.const 1312
-                     i32.const 695
-                     i32.const 3
-                     call $~lib/builtins/abort
-                     unreachable
-                    end
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Int8Array,i8>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Uint8ClampedArray,u8>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32>
-                    call $std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8ClampedArray>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Int16Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint16Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Int32Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint32Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Int64Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint64Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Float32Array>
-                    call $std/typedarray/testTypedArraySet<~lib/typedarray/Float64Array>
-                    i32.const 10
-                    call $~lib/typedarray/Uint8ClampedArray#constructor
-                    local.set $0
-                    i32.const 3
-                    call $~lib/typedarray/Float32Array#constructor
-                    local.tee $30
-                    i32.const 0
-                    f32.const 400
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $30
-                    i32.const 1
-                    f32.const nan:0x400000
-                    call $~lib/typedarray/Float32Array#__set
-                    local.get $30
-                    i32.const 2
-                    f32.const inf
-                    call $~lib/typedarray/Float32Array#__set
-                    i32.const 4
-                    call $~lib/typedarray/Int64Array#constructor
-                    local.tee $29
-                    i32.const 0
-                    i64.const -10
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $29
-                    i32.const 1
-                    i64.const 100
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $29
-                    i32.const 2
-                    i64.const 10
-                    call $~lib/typedarray/Int64Array#__set
-                    local.get $29
-                    i32.const 3
-                    i64.const 300
-                    call $~lib/typedarray/Int64Array#__set
-                    i32.const 2
-                    call $~lib/typedarray/Int32Array#constructor
-                    local.tee $28
-                    i32.const 0
-                    i32.const 300
-                    call $~lib/typedarray/Int32Array#__set
-                    local.get $28
-                    i32.const 1
-                    i32.const -1
-                    call $~lib/typedarray/Int32Array#__set
-                    i32.const 0
-                    local.set $1
-                    local.get $30
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    i32.const 1
-                    i32.add
-                    local.get $0
-                    i32.load offset=8
-                    i32.gt_s
-                    br_if $folding-inner19
-                    local.get $0
-                    i32.load offset=4
-                    i32.const 1
-                    i32.add
-                    local.set $26
-                    local.get $30
-                    i32.load offset=4
-                    local.set $25
-                    local.get $30
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.set $24
-                    loop $for-loop|026
-                     local.get $1
-                     local.get $24
-                     i32.lt_s
-                     if
-                      local.get $1
-                      local.get $26
-                      i32.add
-                      local.get $25
-                      local.get $1
-                      i32.const 2
-                      i32.shl
-                      i32.add
-                      f32.load
-                      local.tee $22
-                      local.get $22
-                      f32.sub
-                      f32.const 0
-                      f32.eq
-                      if (result i32)
-                       f32.const 0
-                       f32.const 255
-                       local.get $22
-                       f32.min
-                       f32.max
-                       i32.trunc_f32_u
-                      else
-                       i32.const 0
-                      end
-                      i32.store8
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|026
-                     end
-                    end
-                    local.get $0
-                    local.get $29
-                    i32.const 4
-                    call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array>
-                    i32.const 0
-                    local.set $1
-                    local.get $28
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    i32.const 8
-                    i32.add
-                    local.get $0
-                    i32.load offset=8
-                    i32.gt_s
-                    br_if $folding-inner19
-                    local.get $0
-                    i32.load offset=4
-                    i32.const 8
-                    i32.add
-                    local.set $26
-                    local.get $28
-                    i32.load offset=4
-                    local.set $25
-                    local.get $28
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.set $24
-                    loop $for-loop|027
-                     local.get $1
-                     local.get $24
-                     i32.lt_s
-                     if
-                      local.get $1
-                      local.get $26
-                      i32.add
-                      local.get $25
-                      local.get $1
-                      i32.const 2
-                      i32.shl
-                      i32.add
-                      i32.load
-                      local.tee $27
-                      i32.const 31
-                      i32.shr_s
-                      i32.const -1
-                      i32.xor
-                      local.get $27
-                      i32.const 255
-                      local.get $27
-                      i32.sub
-                      i32.const 31
-                      i32.shr_s
-                      i32.or
-                      i32.and
-                      i32.store8
-                      local.get $1
-                      i32.const 1
-                      i32.add
-                      local.set $1
-                      br $for-loop|027
-                     end
-                    end
-                    local.get $0
-                    i32.const 10
-                    i32.const 0
-                    i32.const 18
-                    i32.const 8288
-                    call $~lib/rt/__allocArray
-                    call $~lib/rt/pure/__retain
-                    local.tee $25
-                    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
-                    i32.const 4
-                    call $~lib/typedarray/Uint32Array#constructor
-                    local.tee $1
-                    i32.const 0
-                    i32.const 1
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 1
-                    i32.const 300
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 2
-                    i32.const 100
-                    call $~lib/typedarray/Uint32Array#__set
-                    local.get $1
-                    i32.const 3
-                    i32.const -1
-                    call $~lib/typedarray/Uint32Array#__set
-                    i32.const 4
-                    call $~lib/typedarray/Int16Array#constructor
-                    local.tee $27
-                    i32.const 0
-                    i32.const -10
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $27
-                    i32.const 1
-                    i32.const 100
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $27
-                    i32.const 2
-                    i32.const 10
-                    call $~lib/typedarray/Int16Array#__set
-                    local.get $27
-                    i32.const 3
-                    i32.const 300
-                    call $~lib/typedarray/Int16Array#__set
-                    i32.const 0
-                    local.set $26
-                    local.get $1
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.get $0
-                    i32.load offset=8
-                    i32.gt_s
-                    br_if $folding-inner19
-                    local.get $0
-                    i32.load offset=4
-                    local.set $24
-                    local.get $1
-                    i32.load offset=4
-                    local.set $19
-                    local.get $1
-                    i32.load offset=8
-                    i32.const 2
-                    i32.shr_u
-                    local.set $18
-                    loop $for-loop|028
-                     local.get $26
-                     local.get $18
-                     i32.lt_s
-                     if
-                      local.get $24
-                      local.get $26
-                      i32.add
-                      i32.const 255
-                      local.get $19
-                      local.get $26
-                      i32.const 2
-                      i32.shl
-                      i32.add
-                      i32.load
-                      local.tee $17
-                      i32.const 255
-                      local.get $17
-                      i32.lt_u
-                      select
-                      i32.store8
-                      local.get $26
-                      i32.const 1
-                      i32.add
-                      local.set $26
-                      br $for-loop|028
-                     end
-                    end
-                    local.get $0
-                    local.get $27
-                    i32.const 5
-                    call $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array>
-                    local.get $0
-                    i32.const 10
-                    i32.const 0
-                    i32.const 18
-                    i32.const 8320
-                    call $~lib/rt/__allocArray
-                    call $~lib/rt/pure/__retain
-                    local.tee $26
-                    call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
-                    local.get $0
-                    call $~lib/rt/pure/__release
-                    local.get $30
-                    call $~lib/rt/pure/__release
-                    local.get $29
-                    call $~lib/rt/pure/__release
-                    local.get $28
-                    call $~lib/rt/pure/__release
-                    local.get $25
-                    call $~lib/rt/pure/__release
-                    local.get $1
-                    call $~lib/rt/pure/__release
-                    local.get $27
-                    call $~lib/rt/pure/__release
-                    local.get $26
-                    call $~lib/rt/pure/__release
-                    return
-                   end
-                   br $folding-inner3
-                  end
-                  i32.const 0
-                  i32.const 1312
-                  i32.const 323
-                  i32.const 3
-                  call $~lib/builtins/abort
-                  unreachable
-                 end
-                 i32.const 0
-                 i32.const 1312
-                 i32.const 344
-                 i32.const 3
-                 call $~lib/builtins/abort
-                 unreachable
-                end
-                i32.const 0
-                i32.const 1312
-                i32.const 365
+  block $folding-inner0
+   local.get $28
+   i32.const 255
+   i32.and
+   i32.const 6
+   i32.ne
+   br_if $folding-inner0
+   local.get $1
+   i32.const 8332
+   i32.gt_u
+   if
+    local.get $1
+    i32.const 16
+    i32.sub
+    call $~lib/rt/pure/decrement
+   end
+   i32.const 3
+   call $~lib/typedarray/Uint8Array#constructor
+   local.tee $1
+   i32.const 0
+   i32.const 1
+   call $~lib/typedarray/Uint8Array#__set
+   local.get $1
+   i32.const 1
+   i32.const 2
+   call $~lib/typedarray/Uint8Array#__set
+   local.get $1
+   i32.const 2
+   i32.const 3
+   call $~lib/typedarray/Uint8Array#__set
+   block $folding-inner11
+    block $folding-inner10
+     block $folding-inner9
+      block $folding-inner8
+       block $folding-inner7
+        block $folding-inner6
+         block $folding-inner5
+          block $folding-inner4
+           block $folding-inner3
+            local.get $1
+            i32.const 3
+            call $~lib/typedarray/Uint8Array#reduce<u8>
+            i32.const 255
+            i32.and
+            i32.const 6
+            i32.ne
+            br_if $folding-inner0
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            i32.const 3
+            call $~lib/typedarray/Uint8ClampedArray#constructor
+            local.tee $1
+            i32.const 0
+            i32.const 1
+            call $~lib/typedarray/Uint8ClampedArray#__set
+            local.get $1
+            i32.const 1
+            i32.const 2
+            call $~lib/typedarray/Uint8ClampedArray#__set
+            local.get $1
+            i32.const 2
+            i32.const 3
+            call $~lib/typedarray/Uint8ClampedArray#__set
+            local.get $1
+            i32.const 4
+            call $~lib/typedarray/Uint8Array#reduce<u8>
+            i32.const 255
+            i32.and
+            i32.const 6
+            i32.ne
+            br_if $folding-inner0
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            call $std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>
+            call $std/typedarray/testReduce<~lib/typedarray/Uint16Array,u16>
+            i32.const 3
+            call $~lib/typedarray/Int32Array#constructor
+            local.tee $1
+            i32.const 0
+            i32.const 1
+            call $~lib/typedarray/Int32Array#__set
+            local.get $1
+            i32.const 1
+            i32.const 2
+            call $~lib/typedarray/Int32Array#__set
+            local.get $1
+            i32.const 2
+            i32.const 3
+            call $~lib/typedarray/Int32Array#__set
+            local.get $1
+            i32.const 7
+            call $~lib/typedarray/REDUCE<~lib/typedarray/Int32Array,i32,i32>
+            i32.const 6
+            i32.ne
+            br_if $folding-inner0
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            i32.const 3
+            call $~lib/typedarray/Uint32Array#constructor
+            local.tee $1
+            i32.const 0
+            i32.const 1
+            call $~lib/typedarray/Uint32Array#__set
+            local.get $1
+            i32.const 1
+            i32.const 2
+            call $~lib/typedarray/Uint32Array#__set
+            local.get $1
+            i32.const 2
+            i32.const 3
+            call $~lib/typedarray/Uint32Array#__set
+            local.get $1
+            i32.const 8
+            call $~lib/typedarray/REDUCE<~lib/typedarray/Int32Array,i32,i32>
+            i32.const 6
+            i32.ne
+            br_if $folding-inner0
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            i32.const 3
+            call $~lib/typedarray/Int64Array#constructor
+            local.tee $1
+            i32.const 0
+            i64.const 1
+            call $~lib/typedarray/Int64Array#__set
+            local.get $1
+            i32.const 1
+            i64.const 2
+            call $~lib/typedarray/Int64Array#__set
+            local.get $1
+            i32.const 2
+            i64.const 3
+            call $~lib/typedarray/Int64Array#__set
+            local.get $1
+            i32.const 9
+            call $~lib/typedarray/REDUCE<~lib/typedarray/Int64Array,i64,i64>
+            i64.const 6
+            i64.ne
+            br_if $folding-inner0
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            i32.const 3
+            call $~lib/typedarray/Uint64Array#constructor
+            local.tee $1
+            i32.const 0
+            i64.const 1
+            call $~lib/typedarray/Uint64Array#__set
+            local.get $1
+            i32.const 1
+            i64.const 2
+            call $~lib/typedarray/Uint64Array#__set
+            local.get $1
+            i32.const 2
+            i64.const 3
+            call $~lib/typedarray/Uint64Array#__set
+            local.get $1
+            i32.const 10
+            call $~lib/typedarray/REDUCE<~lib/typedarray/Int64Array,i64,i64>
+            i64.const 6
+            i64.ne
+            br_if $folding-inner0
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            call $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>
+            call $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>
+            call $std/typedarray/testReduceRight<~lib/typedarray/Int8Array,i8>
+            i32.const 3
+            call $~lib/typedarray/Uint8Array#constructor
+            local.tee $1
+            i32.const 0
+            i32.const 1
+            call $~lib/typedarray/Uint8Array#__set
+            local.get $1
+            i32.const 1
+            i32.const 2
+            call $~lib/typedarray/Uint8Array#__set
+            local.get $1
+            i32.const 2
+            i32.const 3
+            call $~lib/typedarray/Uint8Array#__set
+            local.get $1
+            i32.const 14
+            call $~lib/typedarray/Uint8Array#reduceRight<u8>
+            i32.const 255
+            i32.and
+            i32.const 6
+            i32.ne
+            br_if $folding-inner3
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            i32.const 3
+            call $~lib/typedarray/Uint8ClampedArray#constructor
+            local.tee $1
+            i32.const 0
+            i32.const 1
+            call $~lib/typedarray/Uint8ClampedArray#__set
+            local.get $1
+            i32.const 1
+            i32.const 2
+            call $~lib/typedarray/Uint8ClampedArray#__set
+            local.get $1
+            i32.const 2
+            i32.const 3
+            call $~lib/typedarray/Uint8ClampedArray#__set
+            local.get $1
+            i32.const 15
+            call $~lib/typedarray/Uint8Array#reduceRight<u8>
+            i32.const 255
+            i32.and
+            i32.const 6
+            i32.ne
+            br_if $folding-inner3
+            local.get $1
+            i32.const 8332
+            i32.gt_u
+            if
+             local.get $1
+             i32.const 16
+             i32.sub
+             call $~lib/rt/pure/decrement
+            end
+            call $std/typedarray/testReduceRight<~lib/typedarray/Int16Array,i16>
+            call $std/typedarray/testReduceRight<~lib/typedarray/Uint16Array,u16>
+            i32.const 3
+            call $~lib/typedarray/Int32Array#constructor
+            local.tee $1
+            i32.const 0
+            i32.const 1
+            call $~lib/typedarray/Int32Array#__set
+            local.get $1
+            i32.const 1
+            i32.const 2
+            call $~lib/typedarray/Int32Array#__set
+            local.get $1
+            i32.const 2
+            i32.const 3
+            call $~lib/typedarray/Int32Array#__set
+            block $folding-inner1
+             local.get $1
+             i32.const 18
+             call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int32Array,i32,i32>
+             i32.const 6
+             i32.ne
+             br_if $folding-inner1
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint32Array#constructor
+             local.tee $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 19
+             call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int32Array,i32,i32>
+             i32.const 6
+             i32.ne
+             br_if $folding-inner1
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int64Array#constructor
+             local.tee $1
+             i32.const 0
+             i64.const 1
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 2
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 3
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 20
+             call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int64Array,i64,i64>
+             i64.const 6
+             i64.ne
+             br_if $folding-inner1
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint64Array#constructor
+             local.tee $1
+             i32.const 0
+             i64.const 1
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 2
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 3
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 21
+             call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int64Array,i64,i64>
+             i64.const 6
+             i64.ne
+             br_if $folding-inner1
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             call $std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Uint8Array,u8>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Uint8ClampedArray,u8>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Int16Array,i16>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Uint16Array,u16>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Int32Array,i32>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Uint32Array,u32>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Int64Array,i64>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Uint64Array,u64>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>
+             i32.const 3
+             call $~lib/typedarray/Int8Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 46
+             call $~lib/typedarray/Int8Array#some
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 47
+             call $~lib/typedarray/Int8Array#some
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint8Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 48
+             call $~lib/typedarray/Uint8Array#some
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 49
+             call $~lib/typedarray/Uint8Array#some
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint8ClampedArray#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 50
+             call $~lib/typedarray/Uint8Array#some
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 51
+             call $~lib/typedarray/Uint8Array#some
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int16Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 52
+             call $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 53
+             call $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint16Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 54
+             call $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 55
+             call $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 56
+             call $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 57
+             call $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 58
+             call $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 59
+             call $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i64.const 2
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 4
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 6
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 60
+             call $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 61
+             call $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i64.const 2
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 4
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 6
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 62
+             call $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 63
+             call $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Float32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             f32.const 2
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 1
+             f32.const 4
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 2
+             f32.const 6
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 64
+             call $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 65
+             call $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Float64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             f64.const 2
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 1
+             f64.const 4
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 2
+             f64.const 6
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 66
+             call $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>
+             i32.eqz
+             br_if $folding-inner4
+             i32.const 67
+             call $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>
+             br_if $folding-inner5
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int8Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 68
+             call $~lib/typedarray/Int8Array#findIndex
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 69
+             call $~lib/typedarray/Int8Array#findIndex
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint8Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 70
+             call $~lib/typedarray/Uint8Array#findIndex
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 71
+             call $~lib/typedarray/Uint8Array#findIndex
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint8ClampedArray#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 72
+             call $~lib/typedarray/Uint8Array#findIndex
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 73
+             call $~lib/typedarray/Uint8Array#findIndex
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int16Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 74
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 75
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint16Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 76
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 77
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 78
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 79
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 3
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 80
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 81
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i64.const 1
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 2
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 3
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 82
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 83
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i64.const 1
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 2
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 3
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 84
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 85
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Float32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             f32.const 1
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 1
+             f32.const 2
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 2
+             f32.const 3
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 86
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 87
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Float64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             f64.const 1
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 1
+             f64.const 2
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 2
+             f64.const 3
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 88
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>
+             i32.const 1
+             i32.ne
+             br_if $folding-inner6
+             i32.const 89
+             call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>
+             i32.const -1
+             i32.ne
+             br_if $folding-inner7
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int8Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Int8Array#__set
+             local.get $1
+             i32.const 90
+             call $~lib/typedarray/Int8Array#every
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 91
+             call $~lib/typedarray/Int8Array#every
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint8Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 92
+             call $~lib/typedarray/Uint8Array#every
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 93
+             call $~lib/typedarray/Uint8Array#every
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint8ClampedArray#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 94
+             call $~lib/typedarray/Uint8Array#every
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 95
+             call $~lib/typedarray/Uint8Array#every
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int16Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Int16Array#__set
+             local.get $1
+             i32.const 96
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 97
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint16Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint16Array#__set
+             local.get $1
+             i32.const 98
+             call $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 99
+             call $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 100
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 101
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i32.const 2
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 4
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 6
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 102
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 103
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Int64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i64.const 2
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 4
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 6
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 104
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 105
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Uint64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             i64.const 2
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 1
+             i64.const 4
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 2
+             i64.const 6
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 106
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 107
+             call $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Float32Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             f32.const 2
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 1
+             f32.const 4
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 2
+             f32.const 6
+             call $~lib/typedarray/Float32Array#__set
+             local.get $1
+             i32.const 108
+             call $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 109
+             call $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 3
+             call $~lib/typedarray/Float64Array#constructor
+             local.tee $1
+             local.get $1
+             i32.const 0
+             f64.const 2
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 1
+             f64.const 4
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 2
+             f64.const 6
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             i32.const 110
+             call $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>
+             i32.eqz
+             br_if $folding-inner8
+             i32.const 111
+             call $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>
+             br_if $folding-inner9
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             call $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>
+             i32.const 0
+             global.set $std/typedarray/forEachCallCount
+             i32.const 3
+             call $~lib/typedarray/Uint8Array#constructor
+             local.tee $1
+             global.set $std/typedarray/forEachSelf
+             local.get $1
+             i32.const 0
+             i32.const 2704
+             i32.const 0
+             call $~lib/array/Array<i32>#__get
+             i32.const 255
+             i32.and
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2704
+             i32.const 1
+             call $~lib/array/Array<i32>#__get
+             i32.const 255
+             i32.and
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 2704
+             i32.const 2
+             call $~lib/array/Array<i32>#__get
+             i32.const 255
+             i32.and
+             call $~lib/typedarray/Uint8Array#__set
+             local.get $1
+             i32.const 113
+             call $~lib/typedarray/FOREACH<~lib/typedarray/Uint8Array,u8>
+             global.get $std/typedarray/forEachCallCount
+             i32.const 3
+             i32.ne
+             br_if $folding-inner10
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 0
+             global.set $std/typedarray/forEachCallCount
+             i32.const 3
+             call $~lib/typedarray/Uint8ClampedArray#constructor
+             local.tee $1
+             global.set $std/typedarray/forEachSelf
+             local.get $1
+             i32.const 0
+             i32.const 2704
+             i32.const 0
+             call $~lib/array/Array<i32>#__get
+             i32.const 255
+             i32.and
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 1
+             i32.const 2704
+             i32.const 1
+             call $~lib/array/Array<i32>#__get
+             i32.const 255
+             i32.and
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 2
+             i32.const 2704
+             i32.const 2
+             call $~lib/array/Array<i32>#__get
+             i32.const 255
+             i32.and
+             call $~lib/typedarray/Uint8ClampedArray#__set
+             local.get $1
+             i32.const 114
+             call $~lib/typedarray/FOREACH<~lib/typedarray/Uint8Array,u8>
+             global.get $std/typedarray/forEachCallCount
+             i32.const 3
+             i32.ne
+             br_if $folding-inner10
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             call $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>
+             call $std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>
+             i32.const 0
+             global.set $std/typedarray/forEachCallCount
+             i32.const 3
+             call $~lib/typedarray/Int32Array#constructor
+             local.tee $1
+             global.set $std/typedarray/forEachSelf
+             local.get $1
+             i32.const 0
+             i32.const 2704
+             i32.const 0
+             call $~lib/array/Array<i32>#__get
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2704
+             i32.const 1
+             call $~lib/array/Array<i32>#__get
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 2704
+             i32.const 2
+             call $~lib/array/Array<i32>#__get
+             call $~lib/typedarray/Int32Array#__set
+             local.get $1
+             i32.const 117
+             call $~lib/typedarray/FOREACH<~lib/typedarray/Int32Array,i32>
+             global.get $std/typedarray/forEachCallCount
+             i32.const 3
+             i32.ne
+             br_if $folding-inner10
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 0
+             global.set $std/typedarray/forEachCallCount
+             i32.const 3
+             call $~lib/typedarray/Uint32Array#constructor
+             local.tee $1
+             global.set $std/typedarray/forEachSelf
+             local.get $1
+             i32.const 0
+             i32.const 2704
+             i32.const 0
+             call $~lib/array/Array<i32>#__get
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2704
+             i32.const 1
+             call $~lib/array/Array<i32>#__get
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 2704
+             i32.const 2
+             call $~lib/array/Array<i32>#__get
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $1
+             i32.const 118
+             call $~lib/typedarray/FOREACH<~lib/typedarray/Int32Array,i32>
+             global.get $std/typedarray/forEachCallCount
+             i32.const 3
+             i32.ne
+             br_if $folding-inner10
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 0
+             global.set $std/typedarray/forEachCallCount
+             i32.const 3
+             call $~lib/typedarray/Int64Array#constructor
+             local.tee $1
+             global.set $std/typedarray/forEachSelf
+             local.get $1
+             i32.const 0
+             i32.const 2704
+             i32.const 0
+             call $~lib/array/Array<i32>#__get
+             i64.extend_i32_s
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2704
+             i32.const 1
+             call $~lib/array/Array<i32>#__get
+             i64.extend_i32_s
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 2704
+             i32.const 2
+             call $~lib/array/Array<i32>#__get
+             i64.extend_i32_s
+             call $~lib/typedarray/Int64Array#__set
+             local.get $1
+             i32.const 119
+             call $~lib/typedarray/FOREACH<~lib/typedarray/Int64Array,i64>
+             global.get $std/typedarray/forEachCallCount
+             i32.const 3
+             i32.ne
+             br_if $folding-inner10
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 0
+             global.set $std/typedarray/forEachCallCount
+             i32.const 3
+             call $~lib/typedarray/Uint64Array#constructor
+             local.tee $1
+             global.set $std/typedarray/forEachSelf
+             local.get $1
+             i32.const 0
+             i32.const 2704
+             i32.const 0
+             call $~lib/array/Array<i32>#__get
+             i64.extend_i32_s
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 1
+             i32.const 2704
+             i32.const 1
+             call $~lib/array/Array<i32>#__get
+             i64.extend_i32_s
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 2
+             i32.const 2704
+             i32.const 2
+             call $~lib/array/Array<i32>#__get
+             i64.extend_i32_s
+             call $~lib/typedarray/Uint64Array#__set
+             local.get $1
+             i32.const 120
+             call $~lib/typedarray/FOREACH<~lib/typedarray/Int64Array,i64>
+             global.get $std/typedarray/forEachCallCount
+             i32.const 3
+             i32.ne
+             br_if $folding-inner10
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             call $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Uint8ClampedArray,u8>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Int16Array,i16>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Uint16Array,u16>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Int32Array,i32>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Uint32Array,u32>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Int64Array,i64>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Uint64Array,u64>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testArrayReverse<~lib/typedarray/Float64Array,f64>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int8Array,i8>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8Array,u8>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint8ClampedArray,u8>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int16Array,i16>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint16Array,u16>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int32Array,i32>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint32Array,u32>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Int64Array,i64>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Uint64Array,u64>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testArrayIndexOfAndLastIndexOf<~lib/typedarray/Float64Array,f64>
+             i32.const 1
+             call $~lib/typedarray/Float64Array#constructor
+             local.tee $1
+             i32.const 0
+             f64.const nan:0x8000000000000
+             call $~lib/typedarray/Float64Array#__set
+             local.get $1
+             f64.const nan:0x8000000000000
+             i32.const 0
+             call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
+             i32.const -1
+             i32.ne
+             if
+              i32.const 0
+              i32.const 1312
+              i32.const 607
+              i32.const 3
+              call $~lib/builtins/abort
+              unreachable
+             end
+             block $__inlined_func$~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64> (result i32)
+              i32.const 0
+              local.set $0
+              i32.const 0
+              local.get $1
+              i32.load offset=8
+              i32.const 3
+              i32.shr_u
+              local.tee $27
+              if (result i32)
+               i32.const 0
+               local.get $27
+               i32.ge_s
+              else
+               i32.const 1
+              end
+              br_if $__inlined_func$~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>
+              drop
+              local.get $1
+              i32.load offset=4
+              local.set $24
+              loop $while-continue|0
+               local.get $0
+               local.get $27
+               i32.lt_s
+               if
+                i32.const 1
+                local.get $24
+                local.get $0
                 i32.const 3
-                call $~lib/builtins/abort
-                unreachable
+                i32.shl
+                i32.add
+                f64.load
+                local.tee $21
+                f64.const nan:0x8000000000000
+                f64.eq
+                if (result i32)
+                 i32.const 1
+                else
+                 local.get $21
+                 local.get $21
+                 f64.ne
+                end
+                br_if $__inlined_func$~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>
+                drop
+                local.get $0
+                i32.const 1
+                i32.add
+                local.set $0
+                br $while-continue|0
                end
+              end
+              i32.const 0
+             end
+             i32.const 1
+             i32.ne
+             if
+              i32.const 0
+              i32.const 1312
+              i32.const 608
+              i32.const 3
+              call $~lib/builtins/abort
+              unreachable
+             end
+             i32.const 1
+             call $~lib/typedarray/Float32Array#constructor
+             local.tee $0
+             i32.const 0
+             f32.const nan:0x400000
+             call $~lib/typedarray/Float32Array#__set
+             local.get $0
+             f32.const nan:0x400000
+             i32.const 0
+             call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
+             i32.const -1
+             i32.ne
+             if
+              i32.const 0
+              i32.const 1312
+              i32.const 613
+              i32.const 3
+              call $~lib/builtins/abort
+              unreachable
+             end
+             block $__inlined_func$~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32> (result i32)
+              i32.const 0
+              local.set $28
+              i32.const 0
+              local.get $0
+              i32.load offset=8
+              i32.const 2
+              i32.shr_u
+              local.tee $26
+              if (result i32)
                i32.const 0
-               i32.const 1312
-               i32.const 366
-               i32.const 3
-               call $~lib/builtins/abort
-               unreachable
+               local.get $26
+               i32.ge_s
+              else
+               i32.const 1
+              end
+              br_if $__inlined_func$~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>
+              drop
+              local.get $0
+              i32.load offset=4
+              local.set $25
+              loop $while-continue|00
+               local.get $28
+               local.get $26
+               i32.lt_s
+               if
+                i32.const 1
+                local.get $25
+                local.get $28
+                i32.const 2
+                i32.shl
+                i32.add
+                f32.load
+                local.tee $20
+                f32.const nan:0x400000
+                f32.eq
+                if (result i32)
+                 i32.const 1
+                else
+                 local.get $20
+                 local.get $20
+                 f32.ne
+                end
+                br_if $__inlined_func$~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>
+                drop
+                local.get $28
+                i32.const 1
+                i32.add
+                local.set $28
+                br $while-continue|00
+               end
               end
               i32.const 0
+             end
+             i32.const 1
+             i32.ne
+             if
+              i32.const 0
+              i32.const 1312
+              i32.const 614
+              i32.const 3
+              call $~lib/builtins/abort
+              unreachable
+             end
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $0
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $0
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int8Array,i8>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8Array,u8>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint8ClampedArray,u8>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int16Array,i16>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint16Array,u16>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint32Array,u32>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int64Array,i64>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Uint64Array,u64>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Float64Array,f64>
+             i32.const 0
+             call $~lib/arraybuffer/ArrayBuffer#constructor
+             local.set $0
+             i32.const 2
+             global.set $~argumentsLength
+             local.get $0
+             i32.const 0
+             call $~lib/typedarray/Uint8Array.wrap@varargs
+             local.tee $28
+             i32.load offset=8
+             if
+              i32.const 0
+              i32.const 1312
+              i32.const 691
+              i32.const 3
+              call $~lib/builtins/abort
+              unreachable
+             end
+             i32.const 2
+             call $~lib/arraybuffer/ArrayBuffer#constructor
+             local.set $1
+             local.get $0
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $0
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             i32.const 2
+             global.set $~argumentsLength
+             local.get $1
+             i32.const 2
+             call $~lib/typedarray/Uint8Array.wrap@varargs
+             local.set $0
+             local.get $28
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $28
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $0
+             i32.load offset=8
+             if
+              i32.const 0
               i32.const 1312
-              i32.const 367
+              i32.const 695
               i32.const 3
               call $~lib/builtins/abort
               unreachable
              end
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $0
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $0
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Int8Array,i8>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Uint8Array,u8>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Uint8ClampedArray,u8>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Int16Array,i16>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Uint16Array,u16>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Int32Array,i32>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Uint32Array,u32>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Int64Array,i64>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Uint64Array,u64>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Float32Array,f32>
+             call $std/typedarray/testArrayWrap<~lib/typedarray/Float64Array,f64>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Int8Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint8ClampedArray>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Int16Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint16Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Int32Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint32Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Int64Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Uint64Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Float32Array>
+             call $std/typedarray/testTypedArraySet<~lib/typedarray/Float64Array>
+             i32.const 10
+             call $~lib/typedarray/Uint8ClampedArray#constructor
+             local.set $1
+             i32.const 3
+             call $~lib/typedarray/Float32Array#constructor
+             local.tee $28
+             i32.const 0
+             f32.const 400
+             call $~lib/typedarray/Float32Array#__set
+             local.get $28
+             i32.const 1
+             f32.const nan:0x400000
+             call $~lib/typedarray/Float32Array#__set
+             local.get $28
+             i32.const 2
+             f32.const inf
+             call $~lib/typedarray/Float32Array#__set
+             i32.const 4
+             call $~lib/typedarray/Int64Array#constructor
+             local.tee $27
+             i32.const 0
+             i64.const -10
+             call $~lib/typedarray/Int64Array#__set
+             local.get $27
+             i32.const 1
+             i64.const 100
+             call $~lib/typedarray/Int64Array#__set
+             local.get $27
+             i32.const 2
+             i64.const 10
+             call $~lib/typedarray/Int64Array#__set
+             local.get $27
+             i32.const 3
+             i64.const 300
+             call $~lib/typedarray/Int64Array#__set
+             i32.const 2
+             call $~lib/typedarray/Int32Array#constructor
+             local.tee $26
+             i32.const 0
+             i32.const 300
+             call $~lib/typedarray/Int32Array#__set
+             local.get $26
+             i32.const 1
+             i32.const -1
+             call $~lib/typedarray/Int32Array#__set
+             i32.const 0
+             local.set $0
+             local.get $28
+             i32.load offset=8
+             i32.const 2
+             i32.shr_u
+             i32.const 1
+             i32.add
+             local.get $1
+             i32.load offset=8
+             i32.gt_s
+             br_if $folding-inner11
+             local.get $1
+             i32.load offset=4
+             i32.const 1
+             i32.add
+             local.set $25
+             local.get $28
+             i32.load offset=4
+             local.set $23
+             local.get $28
+             i32.load offset=8
+             i32.const 2
+             i32.shr_u
+             local.set $22
+             loop $for-loop|00
+              local.get $0
+              local.get $22
+              i32.lt_s
+              if
+               local.get $0
+               local.get $25
+               i32.add
+               local.get $23
+               local.get $0
+               i32.const 2
+               i32.shl
+               i32.add
+               f32.load
+               local.tee $20
+               local.get $20
+               f32.sub
+               f32.const 0
+               f32.eq
+               if (result i32)
+                f32.const 0
+                f32.const 255
+                local.get $20
+                f32.min
+                f32.max
+                i32.trunc_f32_u
+               else
+                i32.const 0
+               end
+               i32.store8
+               local.get $0
+               i32.const 1
+               i32.add
+               local.set $0
+               br $for-loop|00
+              end
+             end
+             local.get $1
+             local.get $27
+             i32.const 4
+             call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int64Array,i64>
+             i32.const 0
+             local.set $0
+             local.get $26
+             i32.load offset=8
+             i32.const 2
+             i32.shr_u
+             i32.const 8
+             i32.add
+             local.get $1
+             i32.load offset=8
+             i32.gt_s
+             br_if $folding-inner11
+             local.get $1
+             i32.load offset=4
+             i32.const 8
+             i32.add
+             local.set $25
+             local.get $26
+             i32.load offset=4
+             local.set $23
+             local.get $26
+             i32.load offset=8
+             i32.const 2
+             i32.shr_u
+             local.set $22
+             loop $for-loop|01
+              local.get $0
+              local.get $22
+              i32.lt_s
+              if
+               local.get $0
+               local.get $25
+               i32.add
+               local.get $23
+               local.get $0
+               i32.const 2
+               i32.shl
+               i32.add
+               i32.load
+               local.tee $24
+               i32.const 31
+               i32.shr_s
+               i32.const -1
+               i32.xor
+               local.get $24
+               i32.const 255
+               local.get $24
+               i32.sub
+               i32.const 31
+               i32.shr_s
+               i32.or
+               i32.and
+               i32.store8
+               local.get $0
+               i32.const 1
+               i32.add
+               local.set $0
+               br $for-loop|01
+              end
+             end
+             local.get $1
+             i32.const 10
+             i32.const 0
+             i32.const 18
+             i32.const 8288
+             call $~lib/rt/__allocArray
+             call $~lib/rt/pure/__retain
+             local.tee $23
+             call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
+             i32.const 4
+             call $~lib/typedarray/Uint32Array#constructor
+             local.tee $0
+             i32.const 0
+             i32.const 1
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $0
+             i32.const 1
+             i32.const 300
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $0
+             i32.const 2
+             i32.const 100
+             call $~lib/typedarray/Uint32Array#__set
+             local.get $0
+             i32.const 3
+             i32.const -1
+             call $~lib/typedarray/Uint32Array#__set
+             i32.const 4
+             call $~lib/typedarray/Int16Array#constructor
+             local.tee $24
              i32.const 0
-             i32.const 1312
-             i32.const 415
+             i32.const -10
+             call $~lib/typedarray/Int16Array#__set
+             local.get $24
+             i32.const 1
+             i32.const 100
+             call $~lib/typedarray/Int16Array#__set
+             local.get $24
+             i32.const 2
+             i32.const 10
+             call $~lib/typedarray/Int16Array#__set
+             local.get $24
              i32.const 3
-             call $~lib/builtins/abort
-             unreachable
+             i32.const 300
+             call $~lib/typedarray/Int16Array#__set
+             i32.const 0
+             local.set $25
+             local.get $0
+             i32.load offset=8
+             i32.const 2
+             i32.shr_u
+             local.get $1
+             i32.load offset=8
+             i32.gt_s
+             br_if $folding-inner11
+             local.get $1
+             i32.load offset=4
+             local.set $22
+             local.get $0
+             i32.load offset=4
+             local.set $19
+             local.get $0
+             i32.load offset=8
+             i32.const 2
+             i32.shr_u
+             local.set $18
+             loop $for-loop|02
+              local.get $25
+              local.get $18
+              i32.lt_s
+              if
+               local.get $22
+               local.get $25
+               i32.add
+               i32.const 255
+               local.get $19
+               local.get $25
+               i32.const 2
+               i32.shl
+               i32.add
+               i32.load
+               local.tee $17
+               i32.const 255
+               local.get $17
+               i32.lt_u
+               select
+               i32.store8
+               local.get $25
+               i32.const 1
+               i32.add
+               local.set $25
+               br $for-loop|02
+              end
+             end
+             local.get $1
+             local.get $24
+             i32.const 5
+             call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int16Array,i16>
+             local.get $1
+             i32.const 10
+             i32.const 0
+             i32.const 18
+             i32.const 8320
+             call $~lib/rt/__allocArray
+             call $~lib/rt/pure/__retain
+             local.tee $25
+             call $std/typedarray/valuesEqual<~lib/typedarray/Uint8ClampedArray>
+             local.get $1
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $1
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $28
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $28
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $27
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $27
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $26
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $26
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $23
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $23
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $0
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $0
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $24
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $24
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             local.get $25
+             i32.const 8332
+             i32.gt_u
+             if
+              local.get $25
+              i32.const 16
+              i32.sub
+              call $~lib/rt/pure/decrement
+             end
+             return
             end
-            i32.const 0
-            i32.const 1312
-            i32.const 417
-            i32.const 3
-            call $~lib/builtins/abort
-            unreachable
            end
            i32.const 0
            i32.const 1312
-           i32.const 438
+           i32.const 344
            i32.const 3
            call $~lib/builtins/abort
            unreachable
           end
           i32.const 0
           i32.const 1312
-          i32.const 440
+          i32.const 415
           i32.const 3
           call $~lib/builtins/abort
           unreachable
          end
          i32.const 0
          i32.const 1312
-         i32.const 461
+         i32.const 417
          i32.const 3
          call $~lib/builtins/abort
          unreachable
         end
         i32.const 0
         i32.const 1312
-        i32.const 463
+        i32.const 438
         i32.const 3
         call $~lib/builtins/abort
         unreachable
        end
        i32.const 0
        i32.const 1312
-       i32.const 495
+       i32.const 440
        i32.const 3
        call $~lib/builtins/abort
        unreachable
       end
       i32.const 0
       i32.const 1312
-      i32.const 626
-      i32.const 5
+      i32.const 461
+      i32.const 3
       call $~lib/builtins/abort
       unreachable
      end
      i32.const 0
      i32.const 1312
-     i32.const 627
-     i32.const 5
+     i32.const 463
+     i32.const 3
      call $~lib/builtins/abort
      unreachable
     end
     i32.const 0
     i32.const 1312
-    i32.const 629
-    i32.const 5
+    i32.const 495
+    i32.const 3
     call $~lib/builtins/abort
     unreachable
    end
-   i32.const 0
-   i32.const 1312
-   i32.const 630
-   i32.const 5
+   i32.const 1376
+   i32.const 1440
+   i32.const 1737
+   i32.const 47
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 1376
-  i32.const 1440
-  i32.const 1775
-  i32.const 47
+  i32.const 0
+  i32.const 1312
+  i32.const 323
+  i32.const 3
   call $~lib/builtins/abort
   unreachable
  )
diff --git a/tests/compiler/std/typedarray.untouched.wat b/tests/compiler/std/typedarray.untouched.wat
index 6100b1c993..91ae78a28f 100644
--- a/tests/compiler/std/typedarray.untouched.wat
+++ b/tests/compiler/std/typedarray.untouched.wat
@@ -1,48 +1,51 @@
 (module
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $none_=>_none (func))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $none_=>_none (func))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
  (type $i64_i32_i32_=>_i32 (func (param i64 i32 i32) (result i32)))
- (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32)))
  (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
- (type $i64_i64_i32_i32_=>_i64 (func (param i64 i64 i32 i32) (result i64)))
+ (type $f32_i32_i32_=>_i32 (func (param f32 i32 i32) (result i32)))
  (type $i32_i64_i32_=>_i32 (func (param i32 i64 i32) (result i32)))
+ (type $i32_i32_i64_=>_i64 (func (param i32 i32 i64) (result i64)))
+ (type $i64_i64_i32_i32_=>_i64 (func (param i64 i64 i32 i32) (result i64)))
+ (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
+ (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
  (type $i64_=>_i32 (func (param i64) (result i32)))
  (type $f64_f64_=>_i32 (func (param f64 f64) (result i32)))
  (type $i64_i32_i32_=>_none (func (param i64 i32 i32)))
- (type $i32_f32_i32_=>_i32 (func (param i32 f32 i32) (result i32)))
- (type $i32_f64_i32_=>_i32 (func (param i32 f64 i32) (result i32)))
  (type $i32_i32_=>_i64 (func (param i32 i32) (result i64)))
- (type $i32_i32_i64_=>_i64 (func (param i32 i32 i64) (result i64)))
  (type $i64_i32_i32_=>_i64 (func (param i64 i32 i32) (result i64)))
+ (type $i32_i32_f32_=>_f32 (func (param i32 i32 f32) (result f32)))
  (type $f32_f32_i32_i32_=>_f32 (func (param f32 f32 i32 i32) (result f32)))
+ (type $i32_i32_f64_=>_f64 (func (param i32 i32 f64) (result f64)))
  (type $f64_f64_i32_i32_=>_f64 (func (param f64 f64 i32 i32) (result f64)))
+ (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (type $i32_i32_i64_=>_none (func (param i32 i32 i64)))
+ (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
  (type $f32_i32_i32_=>_none (func (param f32 i32 i32)))
  (type $f64_i32_i32_=>_none (func (param f64 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_i64_=>_i32 (func (param i32 i32 i64) (result i32)))
  (type $i32_i32_=>_f32 (func (param i32 i32) (result f32)))
- (type $i32_i32_f32_=>_f32 (func (param i32 i32 f32) (result f32)))
  (type $f32_i32_i32_=>_f32 (func (param f32 i32 i32) (result f32)))
  (type $i32_i32_=>_f64 (func (param i32 i32) (result f64)))
- (type $i32_i32_f64_=>_f64 (func (param i32 i32 f64) (result f64)))
  (type $f64_i32_i32_=>_f64 (func (param f64 i32 i32) (result f64)))
- (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_i32_f32_=>_none (func (param i32 i32 f32)))
  (type $i32_i32_f64_=>_none (func (param i32 i32 f64)))
  (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
- (type $i32_i64_i32_=>_none (func (param i32 i64 i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $i32_i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32 i32) (result i32)))
  (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $f64_=>_i32 (func (param f64) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (type $f32_f32_=>_f32 (func (param f32 f32) (result f32)))
  (type $f64_f64_=>_f64 (func (param f64 f64) (result f64)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -225,6 +228,69 @@
  (export "__setArgumentsLength" (func $~setArgumentsLength))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -233,9 +299,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -248,7 +311,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -275,7 +338,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -329,7 +392,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -354,77 +417,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -441,6 +462,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -452,8 +479,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -461,7 +486,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -478,28 +503,18 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -510,44 +525,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -555,30 +560,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 144
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -597,22 +598,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -638,7 +639,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -650,18 +651,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 144
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -715,27 +716,15 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -750,24 +739,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -777,31 +752,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -809,8 +768,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -836,24 +793,22 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -861,7 +816,7 @@
    if
     i32.const 0
     i32.const 144
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -869,16 +824,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -894,7 +849,7 @@
    if
     i32.const 0
     i32.const 144
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -903,8 +858,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -915,49 +870,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -970,10 +921,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -1023,73 +970,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1102,11 +1022,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1126,7 +1046,7 @@
   if
    i32.const 192
    i32.const 144
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1152,9 +1072,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1222,31 +1139,24 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1259,79 +1169,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 144
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1368,9 +1247,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1384,12 +1261,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1399,7 +1276,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1436,7 +1313,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1487,29 +1364,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1529,7 +1386,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1576,7 +1433,7 @@
      if
       i32.const 0
       i32.const 144
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1597,7 +1454,7 @@
     if
      i32.const 0
      i32.const 144
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1618,7 +1475,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1653,344 +1510,339 @@
   i32.const 16
   i32.add
  )
- (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memset (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
+  (local $6 i64)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
-  (local $10 i32)
-  block $~lib/util/memory/memset|inlined.0
-   local.get $0
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
-   i32.const 0
-   i32.const 1
-   i32.gt_s
-   drop
-   local.get $3
-   i32.eqz
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 4
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $4
-   i32.store8
-   local.get $6
-   local.get $4
-   i32.store8 offset=3
-   local.get $3
-   i32.const 2
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=1
-   local.get $5
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=2
-   local.get $6
-   local.get $4
-   i32.store8 offset=1
-   local.get $3
-   i32.const 6
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.store8 offset=3
-   local.get $6
-   local.get $4
-   i32.store8
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   i32.const 0
-   local.get $5
-   i32.sub
-   i32.const 3
-   i32.and
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $3
-   i32.const -4
-   i32.and
-   local.set $3
-   i32.const -1
-   i32.const 255
-   i32.div_u
-   local.get $4
-   i32.const 255
-   i32.and
-   i32.mul
-   local.set $8
-   local.get $5
-   local.get $3
-   i32.add
-   i32.const 28
-   i32.sub
-   local.set $6
-   local.get $5
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=24
-   local.get $3
-   i32.const 8
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=4
-   local.get $5
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=16
-   local.get $6
-   local.get $8
-   i32.store offset=20
-   local.get $3
-   i32.const 24
-   i32.le_u
-   if
-    br $~lib/util/memory/memset|inlined.0
-   end
-   local.get $5
-   local.get $8
-   i32.store offset=12
-   local.get $5
-   local.get $8
-   i32.store offset=16
-   local.get $5
-   local.get $8
-   i32.store offset=20
-   local.get $5
-   local.get $8
-   i32.store offset=24
-   local.get $6
-   local.get $8
-   i32.store
-   local.get $6
-   local.get $8
-   i32.store offset=4
-   local.get $6
-   local.get $8
-   i32.store offset=8
-   local.get $6
-   local.get $8
-   i32.store offset=12
-   i32.const 24
-   local.get $5
-   i32.const 4
-   i32.and
-   i32.add
-   local.set $7
-   local.get $5
-   local.get $7
-   i32.add
-   local.set $5
-   local.get $3
-   local.get $7
-   i32.sub
-   local.set $3
-   local.get $8
-   i64.extend_i32_u
-   local.get $8
-   i64.extend_i32_u
-   i64.const 32
-   i64.shl
-   i64.or
-   local.set $9
-   loop $while-continue|0
-    local.get $3
-    i32.const 32
-    i32.ge_u
-    local.set $10
-    local.get $10
-    if
-     local.get $5
-     local.get $9
-     i64.store
-     local.get $5
-     local.get $9
-     i64.store offset=8
-     local.get $5
-     local.get $9
-     i64.store offset=16
-     local.get $5
-     local.get $9
-     i64.store offset=24
-     local.get $3
-     i32.const 32
-     i32.sub
-     local.set $3
-     local.get $5
-     i32.const 32
-     i32.add
-     local.set $5
-     br $while-continue|0
-    end
-   end
-  end
- )
- (func $~lib/rt/pure/increment (param $0 i32)
-  (local $1 i32)
-  local.get $0
-  i32.load offset=4
-  local.set $1
-  local.get $1
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  local.get $1
+  i32.const 0
   i32.const 1
-  i32.add
-  i32.const 268435455
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.eq
+  i32.gt_s
+  drop
+  local.get $2
   i32.eqz
   if
-   i32.const 0
-   i32.const 256
-   i32.const 109
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
+   return
   end
   local.get $0
-  local.get $1
-  i32.const 1
+  local.get $2
   i32.add
-  i32.store offset=4
-  i32.const 1
-  drop
-  local.get $0
-  call $~lib/rt/rtrace/onincrement
-  i32.const 1
-  drop
-  local.get $0
-  i32.load
-  i32.const 1
-  i32.and
-  i32.eqz
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 256
-   i32.const 112
-   i32.const 14
-   call $~lib/builtins/abort
-   unreachable
-  end
- )
- (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
+  i32.const 4
+  i32.sub
+  local.set $3
   local.get $0
-  global.get $~lib/heap/__heap_base
-  i32.gt_u
+  local.get $1
+  i32.store8
+  local.get $3
+  local.get $1
+  i32.store8 offset=3
+  local.get $2
+  i32.const 2
+  i32.le_u
   if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/increment
+   return
   end
   local.get $0
- )
- (func $~lib/rt/pure/__release (param $0 i32)
+  local.get $1
+  i32.store8 offset=1
   local.get $0
-  global.get $~lib/heap/__heap_base
-  i32.gt_u
-  if
-   local.get $0
-   i32.const 16
-   i32.sub
-   call $~lib/rt/pure/decrement
-  end
- )
- (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $1
-  i32.const 1073741808
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=2
+  local.get $3
+  local.get $1
+  i32.store8 offset=1
   local.get $2
-  i32.shr_u
-  i32.gt_u
+  i32.const 6
+  i32.le_u
   if
-   i32.const 32
-   i32.const 80
-   i32.const 18
-   i32.const 57
-   call $~lib/builtins/abort
-   unreachable
+   return
   end
+  local.get $0
   local.get $1
-  local.get $2
-  i32.shl
-  local.tee $1
-  i32.const 0
-  call $~lib/rt/tlsf/__alloc
-  local.set $3
+  i32.store8 offset=3
   local.get $3
-  i32.const 0
   local.get $1
-  call $~lib/memory/memory.fill
-  local.get $0
-  i32.eqz
+  i32.store8
+  local.get $2
+  i32.const 8
+  i32.le_u
   if
-   i32.const 12
-   i32.const 2
-   call $~lib/rt/tlsf/__alloc
-   call $~lib/rt/pure/__retain
-   local.set $0
+   return
   end
-  local.get $0
-  i32.const 0
-  i32.store
-  local.get $0
   i32.const 0
-  i32.store offset=4
   local.get $0
-  i32.const 0
-  i32.store offset=8
+  i32.sub
+  i32.const 3
+  i32.and
+  local.set $4
   local.get $0
-  local.tee $4
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $2
+  i32.const -4
+  i32.and
+  local.set $2
+  i32.const -1
+  i32.const 255
+  i32.div_u
+  local.get $1
+  i32.const 255
+  i32.and
+  i32.mul
+  local.set $5
+  local.get $0
+  local.get $2
+  i32.add
+  i32.const 28
+  i32.sub
+  local.set $3
+  local.get $0
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=24
+  local.get $2
+  i32.const 8
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=4
+  local.get $0
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=16
+  local.get $3
+  local.get $5
+  i32.store offset=20
+  local.get $2
+  i32.const 24
+  i32.le_u
+  if
+   return
+  end
+  local.get $0
+  local.get $5
+  i32.store offset=12
+  local.get $0
+  local.get $5
+  i32.store offset=16
+  local.get $0
+  local.get $5
+  i32.store offset=20
+  local.get $0
+  local.get $5
+  i32.store offset=24
+  local.get $3
+  local.get $5
+  i32.store
+  local.get $3
+  local.get $5
+  i32.store offset=4
+  local.get $3
+  local.get $5
+  i32.store offset=8
+  local.get $3
+  local.get $5
+  i32.store offset=12
+  i32.const 24
+  local.get $0
+  i32.const 4
+  i32.and
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $4
+  i32.add
+  local.set $0
+  local.get $2
+  local.get $4
+  i32.sub
+  local.set $2
+  local.get $5
+  i64.extend_i32_u
+  local.get $5
+  i64.extend_i32_u
+  i64.const 32
+  i64.shl
+  i64.or
+  local.set $6
+  loop $while-continue|0
+   local.get $2
+   i32.const 32
+   i32.ge_u
+   local.set $7
+   local.get $7
+   if
+    local.get $0
+    local.get $6
+    i64.store
+    local.get $0
+    local.get $6
+    i64.store offset=8
+    local.get $0
+    local.get $6
+    i64.store offset=16
+    local.get $0
+    local.get $6
+    i64.store offset=24
+    local.get $2
+    i32.const 32
+    i32.sub
+    local.set $2
+    local.get $0
+    i32.const 32
+    i32.add
+    local.set $0
+    br $while-continue|0
+   end
+  end
+ )
+ (func $~lib/memory/memory.fill (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memset
+ )
+ (func $~lib/rt/pure/increment (param $0 i32)
+  (local $1 i32)
+  local.get $0
+  i32.load offset=4
+  local.set $1
+  local.get $1
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.const 268435455
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 256
+   i32.const 109
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.add
+  i32.store offset=4
+  i32.const 1
+  drop
+  local.get $0
+  call $~lib/rt/rtrace/onincrement
+  i32.const 1
+  drop
+  local.get $0
+  i32.load
+  i32.const 1
+  i32.and
+  i32.eqz
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 256
+   i32.const 112
+   i32.const 14
+   call $~lib/builtins/abort
+   unreachable
+  end
+ )
+ (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
+  local.get $0
+  global.get $~lib/heap/__heap_base
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/increment
+  end
+  local.get $0
+ )
+ (func $~lib/rt/pure/__release (param $0 i32)
+  local.get $0
+  global.get $~lib/heap/__heap_base
+  i32.gt_u
+  if
+   local.get $0
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
+ )
+ (func $~lib/arraybuffer/ArrayBufferView#constructor (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  local.get $1
+  i32.const 1073741808
+  local.get $2
+  i32.shr_u
+  i32.gt_u
+  if
+   i32.const 32
+   i32.const 80
+   i32.const 18
+   i32.const 57
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  local.get $2
+  i32.shl
+  local.tee $1
+  i32.const 0
+  call $~lib/rt/tlsf/__alloc
+  local.set $3
+  local.get $3
+  i32.const 0
+  local.get $1
+  call $~lib/memory/memory.fill
+  local.get $0
+  i32.eqz
+  if
+   i32.const 12
+   i32.const 2
+   call $~lib/rt/tlsf/__alloc
+   call $~lib/rt/pure/__retain
+   local.set $0
+  end
+  local.get $0
+  i32.const 0
+  i32.store
+  local.get $0
+  i32.const 0
+  i32.store offset=4
+  local.get $0
+  i32.const 0
+  i32.store offset=8
+  local.get $0
+  local.tee $4
   local.get $3
   local.tee $5
   local.get $4
@@ -2834,112 +2686,112 @@
   i32.add
   i32.load
  )
- (func $~lib/typedarray/Int32Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 8
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 2
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 2
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Int32Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int32Array,i32>
  )
  (func $~lib/typedarray/Float64Array#__set (param $0 i32) (param $1 i32) (param $2 f64)
   local.get $1
@@ -2965,112 +2817,112 @@
   local.get $2
   f64.store
  )
- (func $~lib/typedarray/Float64Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 13
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 3
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 3
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Float64Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Float64Array,f64>
  )
  (func $~setArgumentsLength (param $0 i32)
   local.get $0
@@ -3207,7 +3059,7 @@
   if
    i32.const 0
    i32.const 144
-   i32.const 581
+   i32.const 573
    i32.const 3
    call $~lib/builtins/abort
    unreachable
@@ -3527,88 +3379,84 @@
   local.get $12
   f64.store
  )
- (func $~lib/typedarray/Float64Array#sort (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/util/sort/SORT<f64> (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  drop
+  local.get $1
+  i32.const 256
+  i32.lt_s
+  if
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/insertionSort<f64>
+  else
+   local.get $0
+   local.get $1
+   local.get $2
+   call $~lib/util/sort/weakHeapSort<f64>
+  end
+ )
+ (func $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 f64)
-  (local $7 f64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32)
+  (local $4 f64)
+  (local $5 f64)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  call $~lib/typedarray/Float64Array#get:length
+  local.set $2
+  local.get $2
+  i32.const 1
+  i32.le_s
+  if
    local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+   return
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $3
+  local.get $2
+  i32.const 2
+  i32.eq
+  if
    local.get $3
-   call $~lib/typedarray/Float64Array#get:length
+   f64.load offset=8
    local.set $4
-   local.get $4
-   i32.const 1
-   i32.le_s
-   if
-    local.get $3
-    br $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0
-   end
    local.get $3
-   i32.load offset=4
+   f64.load
    local.set $5
    local.get $4
-   i32.const 2
-   i32.eq
-   if
-    local.get $5
-    f64.load offset=8
-    local.set $6
-    local.get $5
-    f64.load
-    local.set $7
-    local.get $6
-    local.get $7
-    i32.const 2
-    global.set $~argumentsLength
-    local.get $2
-    call_indirect (type $f64_f64_=>_i32)
-    i32.const 0
-    i32.lt_s
-    if
-     local.get $5
-     local.get $7
-     f64.store offset=8
-     local.get $5
-     local.get $6
-     f64.store
-    end
-    local.get $3
-    br $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>|inlined.0
-   end
    local.get $5
-   local.set $10
-   local.get $4
-   local.set $9
-   local.get $2
-   local.set $8
+   i32.const 2
+   global.set $~argumentsLength
+   local.get $1
+   call_indirect (type $f64_f64_=>_i32)
    i32.const 0
-   drop
-   local.get $9
-   i32.const 256
    i32.lt_s
    if
-    local.get $10
-    local.get $9
-    local.get $8
-    call $~lib/util/sort/insertionSort<f64>
-   else
-    local.get $10
-    local.get $9
-    local.get $8
-    call $~lib/util/sort/weakHeapSort<f64>
+    local.get $3
+    local.get $5
+    f64.store offset=8
+    local.get $3
+    local.get $4
+    f64.store
    end
-   local.get $3
+   local.get $0
+   return
   end
+  local.get $3
+  local.get $2
+  local.get $1
+  call $~lib/util/sort/SORT<f64>
+  local.get $0
+ )
+ (func $~lib/typedarray/Float64Array#sort (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SORT<~lib/typedarray/Float64Array,f64>
  )
  (func $~lib/util/sort/COMPARATOR<f64>~anonymous|0 (param $0 f64) (param $1 f64) (result i32)
   (local $2 i64)
@@ -3643,6 +3491,18 @@
   i64.lt_s
   i32.sub
  )
+ (func $~lib/util/sort/COMPARATOR<f64> (result i32)
+  i32.const 0
+  drop
+  i32.const 1
+  drop
+  i32.const 8
+  i32.const 4
+  i32.eq
+  drop
+  i32.const 1
+  return
+ )
  (func $~lib/typedarray/Float64Array#sort@varargs (param $0 i32) (param $1 i32) (result i32)
   block $1of1
    block $0of1
@@ -3652,18 +3512,7 @@
     end
     unreachable
    end
-   block $~lib/util/sort/COMPARATOR<f64>|inlined.0 (result i32)
-    i32.const 0
-    drop
-    i32.const 1
-    drop
-    i32.const 8
-    i32.const 4
-    i32.eq
-    drop
-    i32.const 1
-    br $~lib/util/sort/COMPARATOR<f64>|inlined.0
-   end
+   call $~lib/util/sort/COMPARATOR<f64>
    local.set $1
   end
   local.get $0
@@ -3764,98 +3613,95 @@
   local.get $2
   i32.store8
  )
- (func $~lib/typedarray/Int8Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $7
-  local.get $1
-  local.set $6
-  local.get $2
-  local.set $5
-  local.get $3
-  local.set $4
-  local.get $7
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $8
-  local.get $7
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
-  local.set $9
-  local.get $5
+  local.set $5
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $9
    local.get $5
+   local.get $2
    i32.add
-   local.tee $10
+   local.tee $6
    i32.const 0
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $6
    local.get $5
-   local.tee $10
-   local.get $9
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.lt_s
    select
   end
-  local.set $5
-  local.get $4
+  local.set $2
+  local.get $3
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $9
-   local.get $4
+   local.get $5
+   local.get $3
    i32.add
-   local.tee $10
+   local.tee $6
    i32.const 0
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.gt_s
    select
   else
-   local.get $4
-   local.tee $10
-   local.get $9
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.get $3
+   local.tee $6
+   local.get $5
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.lt_s
    select
   end
-  local.set $4
+  local.set $3
   i32.const 1
   i32.const 1
   i32.eq
   drop
-  local.get $5
-  local.get $4
+  local.get $2
+  local.get $3
   i32.lt_s
   if
-   local.get $8
-   local.get $5
-   i32.add
-   local.get $6
    local.get $4
-   local.get $5
+   local.get $2
+   i32.add
+   local.get $1
+   local.get $3
+   local.get $2
    i32.sub
    call $~lib/memory/memory.fill
   end
-  local.get $7
+  local.get $0
+ )
+ (func $~lib/typedarray/Int8Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  local.get $3
+  call $~lib/typedarray/FILL<~lib/typedarray/Int8Array,i8>
  )
  (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
@@ -4881,238 +4727,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/rt/__allocBuffer (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   local.get $0
@@ -5284,213 +5125,210 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int8Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 3
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 0
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 0
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
  )
- (func $~lib/typedarray/Int32Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/typedarray/Int8Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int8Array,i8>
+ )
+ (func $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $7
-  local.get $1
-  local.set $6
-  local.get $2
-  local.set $5
-  local.get $3
-  local.set $4
-  local.get $7
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $8
-  local.get $7
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $9
-  local.get $5
+  local.set $5
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $9
    local.get $5
+   local.get $2
    i32.add
-   local.tee $10
+   local.tee $6
    i32.const 0
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $6
    local.get $5
-   local.tee $10
-   local.get $9
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.lt_s
    select
   end
-  local.set $5
-  local.get $4
+  local.set $2
+  local.get $3
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $9
-   local.get $4
+   local.get $5
+   local.get $3
    i32.add
-   local.tee $10
+   local.tee $6
    i32.const 0
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.gt_s
    select
   else
-   local.get $4
-   local.tee $10
-   local.get $9
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.get $3
+   local.tee $6
+   local.get $5
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.lt_s
    select
   end
-  local.set $4
+  local.set $3
   i32.const 4
   i32.const 1
   i32.eq
   drop
   loop $for-loop|0
-   local.get $5
-   local.get $4
+   local.get $2
+   local.get $3
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $6
+   local.get $6
    if
-    local.get $8
-    local.get $5
+    local.get $4
+    local.get $2
     i32.const 2
     i32.shl
     i32.add
-    local.get $6
+    local.get $1
     i32.store
-    local.get $5
+    local.get $2
     i32.const 1
     i32.add
-    local.set $5
+    local.set $2
     br $for-loop|0
    end
   end
-  local.get $7
+  local.get $0
+ )
+ (func $~lib/typedarray/Int32Array#fill (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  local.get $3
+  call $~lib/typedarray/FILL<~lib/typedarray/Int32Array,i32>
  )
  (func $~lib/array/Array<i32>#get:length (param $0 i32) (result i32)
   local.get $0
@@ -5597,112 +5435,111 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int32Array#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $4
-   local.get $6
+   local.get $1
+   local.get $3
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
+   local.get $2
    local.get $3
-   local.get $6
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.get $4
+  local.set $2
+  local.get $2
+  local.get $1
   i32.sub
-  local.tee $7
+  local.tee $4
   i32.const 0
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.tee $5
+  local.get $4
+  local.get $5
   i32.gt_s
   select
-  local.set $6
+  local.set $3
   i32.const 0
-  local.get $6
+  local.get $3
   call $~lib/typedarray/Int32Array#constructor
-  local.tee $7
+  local.tee $4
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $8
+  local.set $6
+  local.get $6
   i32.load offset=4
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 2
   i32.shl
   i32.add
-  local.get $6
+  local.get $3
   i32.const 2
   i32.shl
   call $~lib/memory/memory.copy
-  local.get $8
-  local.set $9
-  local.get $5
+  local.get $6
+  local.set $5
+  local.get $4
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $5
  )
- (func $~lib/typedarray/Int32Array#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+ (func $~lib/typedarray/Int32Array#slice (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SLICE<~lib/typedarray/Int32Array,i32>
+ )
+ (func $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
@@ -5711,136 +5548,134 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  (local $14 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $7
-  local.get $1
-  local.set $6
-  local.get $2
-  local.set $5
-  local.get $3
-  local.set $4
-  local.get $7
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $8
-  local.get $7
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $9
+  local.set $5
+  local.get $3
+  local.tee $6
   local.get $4
-  local.tee $10
-  local.get $8
-  local.tee $11
-  local.get $10
-  local.get $11
+  local.tee $7
+  local.get $6
+  local.get $7
   i32.lt_s
   select
-  local.set $4
-  local.get $6
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $8
-   local.get $6
+   local.get $4
+   local.get $1
    i32.add
-   local.tee $10
+   local.tee $6
    i32.const 0
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $6
+   local.get $4
+   local.tee $7
    local.get $6
-   local.tee $10
-   local.get $8
-   local.tee $11
-   local.get $10
-   local.get $11
+   local.get $7
    i32.lt_s
    select
   end
-  local.set $10
-  local.get $5
+  local.set $8
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $8
-   local.get $5
+   local.get $4
+   local.get $2
    i32.add
-   local.tee $11
+   local.tee $6
    i32.const 0
-   local.tee $12
-   local.get $11
-   local.get $12
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.gt_s
    select
   else
-   local.get $5
-   local.tee $11
-   local.get $8
-   local.tee $12
-   local.get $11
-   local.get $12
+   local.get $2
+   local.tee $6
+   local.get $4
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.lt_s
    select
   end
-  local.set $11
-  local.get $4
+  local.set $9
+  local.get $3
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $8
    local.get $4
+   local.get $3
    i32.add
-   local.tee $12
+   local.tee $6
    i32.const 0
-   local.tee $13
-   local.get $12
-   local.get $13
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.gt_s
    select
   else
+   local.get $3
+   local.tee $6
    local.get $4
-   local.tee $12
-   local.get $8
-   local.tee $13
-   local.get $12
-   local.get $13
+   local.tee $7
+   local.get $6
+   local.get $7
    i32.lt_s
    select
   end
-  local.set $12
-  local.get $12
-  local.get $11
+  local.set $10
+  local.get $10
+  local.get $9
   i32.sub
-  local.tee $13
+  local.tee $6
+  local.get $4
   local.get $8
-  local.get $10
   i32.sub
-  local.tee $14
-  local.get $13
-  local.get $14
+  local.tee $7
+  local.get $6
+  local.get $7
   i32.lt_s
   select
-  local.set $13
-  local.get $9
-  local.get $10
+  local.set $11
+  local.get $5
+  local.get $8
   i32.const 2
   i32.shl
   i32.add
+  local.get $5
   local.get $9
-  local.get $11
   i32.const 2
   i32.shl
   i32.add
-  local.get $13
+  local.get $11
   i32.const 2
   i32.shl
   call $~lib/memory/memory.copy
-  local.get $7
+  local.get $0
+ )
+ (func $~lib/typedarray/Int32Array#copyWithin (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  local.get $3
+  call $~lib/typedarray/COPY_WITHIN<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>~anonymous|0 (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32)
   (local $4 i32)
@@ -5855,62 +5690,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int8Array#reduce<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Int8Array,i8,i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $8
-  local.get $5
+  local.get $2
+  local.set $5
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $5
+ )
+ (func $~lib/typedarray/Int8Array#reduce<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Int8Array,i8,i8>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Int8Array,i8>
   (local $0 i32)
@@ -5993,62 +5827,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint8Array#reduce<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Uint8Array,u8,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $8
-  local.get $5
+  local.get $2
+  local.set $5
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint8Array#reduce<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Uint8Array,u8,u8>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
@@ -6109,62 +5942,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint8ClampedArray#reduce<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Uint8ClampedArray,u8,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $8
-  local.get $5
+  local.get $2
+  local.set $5
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#reduce<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Uint8ClampedArray,u8,u8>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
@@ -6249,62 +6081,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int16Array#reduce<i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Int16Array,i16,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $8
-  local.get $5
+  local.get $2
+  local.set $5
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $5
+ )
+ (func $~lib/typedarray/Int16Array#reduce<i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Int16Array,i16,i16>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
@@ -6391,62 +6222,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint16Array#reduce<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Uint16Array,u16,u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 1
     i32.shl
     i32.add
     i32.load16_u
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $8
-  local.get $5
+  local.get $2
+  local.set $5
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint16Array#reduce<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Uint16Array,u16,u16>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
@@ -6507,62 +6337,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int32Array#reduce<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Int32Array,i32,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $8
-  local.get $5
+  local.get $2
+  local.set $5
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $5
+ )
+ (func $~lib/typedarray/Int32Array#reduce<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Int32Array,i32,i32>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
@@ -6645,62 +6474,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint32Array#reduce<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Uint32Array,u32,u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $8
-  local.get $5
+  local.get $2
+  local.set $5
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint32Array#reduce<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Uint32Array,u32,u32>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
@@ -6783,63 +6611,62 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int64Array#reduce<i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
-  (local $3 i64)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Int64Array,i64,i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i64)
+  (local $7 i64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i64_i64_i32_i32_=>_i64)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $10
-  local.get $5
+  local.get $2
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $10
+  local.get $7
+ )
+ (func $~lib/typedarray/Int64Array#reduce<i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Int64Array,i64,i64>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
@@ -6922,63 +6749,62 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint64Array#reduce<u64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
-  (local $3 i64)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Uint64Array,u64,u64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i64)
+  (local $7 i64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i64_i64_i32_i32_=>_i64)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $10
-  local.get $5
+  local.get $2
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $10
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint64Array#reduce<u64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Uint64Array,u64,u64>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
@@ -7061,63 +6887,62 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Float32Array#reduce<f32> (param $0 i32) (param $1 i32) (param $2 f32) (result f32)
-  (local $3 f32)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Float32Array,f32,f32> (param $0 i32) (param $1 i32) (param $2 f32) (result f32)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 f32)
+  (local $7 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $f32_f32_i32_i32_=>_f32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $10
-  local.get $5
+  local.get $2
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $10
+  local.get $7
+ )
+ (func $~lib/typedarray/Float32Array#reduce<f32> (param $0 i32) (param $1 i32) (param $2 f32) (result f32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Float32Array,f32,f32>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
@@ -7176,63 +7001,62 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Float64Array#reduce<f64> (param $0 i32) (param $1 i32) (param $2 f64) (result f64)
-  (local $3 f64)
+ (func $~lib/typedarray/REDUCE<~lib/typedarray/Float64Array,f64,f64> (param $0 i32) (param $1 i32) (param $2 f64) (result f64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 f64)
+  (local $7 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
+  local.set $3
   i32.const 0
-  local.set $7
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
-  local.set $8
+  local.set $5
   loop $for-loop|0
-   local.get $7
-   local.get $8
+   local.get $4
+   local.get $5
    i32.lt_s
-   local.set $9
-   local.get $9
+   local.set $6
+   local.get $6
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $f64_f64_i32_i32_=>_f64)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.add
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $10
-  local.get $5
+  local.get $2
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $10
+  local.get $7
+ )
+ (func $~lib/typedarray/Float64Array#reduce<f64> (param $0 i32) (param $1 i32) (param $2 f64) (result f64)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE<~lib/typedarray/Float64Array,f64,f64>
  )
  (func $std/typedarray/testReduce<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
@@ -7291,61 +7115,60 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int8Array#reduceRight<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int8Array,i8,i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $7
-  local.get $5
+  local.get $2
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $4
+ )
+ (func $~lib/typedarray/Int8Array#reduceRight<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int8Array,i8,i8>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Int8Array,i8>
   (local $0 i32)
@@ -7408,61 +7231,60 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint8Array#reduceRight<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint8Array,u8,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $7
-  local.get $5
+  local.get $2
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8Array#reduceRight<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint8Array,u8,u8>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
@@ -7523,61 +7345,60 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint8ClampedArray#reduceRight<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint8ClampedArray,u8,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $7
-  local.get $5
+  local.get $2
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#reduceRight<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint8ClampedArray,u8,u8>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
@@ -7638,61 +7459,60 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int16Array#reduceRight<i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int16Array,i16,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $7
-  local.get $5
+  local.get $2
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $4
+ )
+ (func $~lib/typedarray/Int16Array#reduceRight<i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int16Array,i16,i16>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
@@ -7755,61 +7575,60 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint16Array#reduceRight<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint16Array,u16,u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 1
     i32.shl
     i32.add
     i32.load16_u
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $7
-  local.get $5
+  local.get $2
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint16Array#reduceRight<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint16Array,u16,u16>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
@@ -7870,61 +7689,60 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int32Array#reduceRight<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int32Array,i32,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $7
-  local.get $5
+  local.get $2
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $4
+ )
+ (func $~lib/typedarray/Int32Array#reduceRight<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int32Array,i32,i32>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
@@ -7983,61 +7801,60 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint32Array#reduceRight<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint32Array,u32,u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i32_i32_i32_i32_=>_i32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $7
-  local.get $5
+  local.get $2
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $7
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint32Array#reduceRight<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint32Array,u32,u32>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
@@ -8096,62 +7913,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Int64Array#reduceRight<i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
-  (local $3 i64)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int64Array,i64,i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
+  (local $6 i64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i64_i64_i32_i32_=>_i64)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $9
-  local.get $5
+  local.get $2
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $6
+ )
+ (func $~lib/typedarray/Int64Array#reduceRight<i64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Int64Array,i64,i64>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
@@ -8210,62 +8026,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Uint64Array#reduceRight<u64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
-  (local $3 i64)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint64Array,u64,u64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
+  (local $6 i64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $i64_i64_i32_i32_=>_i64)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $9
-  local.get $5
+  local.get $2
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $6
+ )
+ (func $~lib/typedarray/Uint64Array#reduceRight<u64> (param $0 i32) (param $1 i32) (param $2 i64) (result i64)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Uint64Array,u64,u64>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
@@ -8324,62 +8139,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Float32Array#reduceRight<f32> (param $0 i32) (param $1 i32) (param $2 f32) (result f32)
-  (local $3 f32)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Float32Array,f32,f32> (param $0 i32) (param $1 i32) (param $2 f32) (result f32)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 f32)
+  (local $6 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $f32_f32_i32_i32_=>_f32)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $9
-  local.get $5
+  local.get $2
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $6
+ )
+ (func $~lib/typedarray/Float32Array#reduceRight<f32> (param $0 i32) (param $1 i32) (param $2 f32) (result f32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Float32Array,f32,f32>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
@@ -8438,62 +8252,61 @@
   call $~lib/rt/pure/__release
   local.get $4
  )
- (func $~lib/typedarray/Float64Array#reduceRight<f64> (param $0 i32) (param $1 i32) (param $2 f64) (result f64)
-  (local $3 f64)
+ (func $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Float64Array,f64,f64> (param $0 i32) (param $1 i32) (param $2 f64) (result f64)
+  (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 f64)
+  (local $6 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $6
-  local.get $5
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.const 1
   i32.sub
-  local.set $7
+  local.set $4
   loop $for-loop|0
-   local.get $7
+   local.get $4
    i32.const 0
    i32.ge_s
-   local.set $8
-   local.get $8
+   local.set $5
+   local.get $5
    if
+    local.get $2
     local.get $3
-    local.get $6
-    local.get $7
+    local.get $4
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.get $7
-    local.get $5
+    local.get $4
+    local.get $0
     i32.const 4
     global.set $~argumentsLength
-    local.get $4
+    local.get $1
     call_indirect (type $f64_f64_i32_i32_=>_f64)
-    local.set $3
-    local.get $7
+    local.set $2
+    local.get $4
     i32.const 1
     i32.sub
-    local.set $7
+    local.set $4
     br $for-loop|0
    end
   end
-  local.get $3
-  local.set $9
-  local.get $5
+  local.get $2
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $6
+ )
+ (func $~lib/typedarray/Float64Array#reduceRight<f64> (param $0 i32) (param $1 i32) (param $2 f64) (result f64)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/REDUCE_RIGHT<~lib/typedarray/Float64Array,f64,f64>
  )
  (func $std/typedarray/testReduceRight<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
@@ -8552,7 +8365,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int8Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -8560,81 +8373,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 0
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 3
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 0
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     i32.store8
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Int8Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Int8Array,i8>
  )
  (func $std/typedarray/testArrayMap<~lib/typedarray/Int8Array,i8>
   (local $0 i32)
@@ -8724,7 +8538,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -8732,81 +8546,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 0
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 4
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 0
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     i32.store8
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint8Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint8Array,u8>
  )
  (func $~lib/typedarray/Uint8Array#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -8915,7 +8730,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8ClampedArray#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -8923,81 +8738,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 0
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 5
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 0
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     i32.store8
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint8ClampedArray,u8>
  )
  (func $std/typedarray/testArrayMap<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
@@ -9087,7 +8903,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int16Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -9095,81 +8911,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 1
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 6
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 1
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     i32.store16
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Int16Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Int16Array,i16>
  )
  (func $~lib/typedarray/Int16Array#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -9282,7 +9099,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint16Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -9290,81 +9107,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 1
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 7
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 1
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 1
     i32.shl
     i32.add
     i32.load16_u
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     i32.store16
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint16Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint16Array,u16>
  )
  (func $~lib/typedarray/Uint16Array#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -9477,7 +9295,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int32Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -9485,81 +9303,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 2
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 8
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 2
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     i32.store
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Int32Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testArrayMap<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
@@ -9649,7 +9468,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint32Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -9657,81 +9476,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 2
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 9
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 2
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     i32.store
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint32Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint32Array,u32>
  )
  (func $~lib/typedarray/Uint32Array#__get (param $0 i32) (param $1 i32) (result i32)
   local.get $1
@@ -9844,7 +9664,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int64Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -9852,81 +9672,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 10
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 3
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i64_i32_i32_=>_i64)
     i64.store
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Int64Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Int64Array,i64>
  )
  (func $~lib/typedarray/Int64Array#__get (param $0 i32) (param $1 i32) (result i64)
   local.get $1
@@ -10039,7 +9860,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint64Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -10047,81 +9868,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 11
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 3
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i64_i32_i32_=>_i64)
     i64.store
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint64Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Uint64Array,u64>
  )
  (func $~lib/typedarray/Uint64Array#__get (param $0 i32) (param $1 i32) (result i64)
   local.get $1
@@ -10234,7 +10056,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float32Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -10242,81 +10064,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 2
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 12
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 2
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $f32_i32_i32_=>_f32)
     f32.store
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Float32Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Float32Array,f32>
  )
  (func $~lib/typedarray/Float32Array#__get (param $0 i32) (param $1 i32) (result f32)
   local.get $1
@@ -10429,7 +10252,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float64Array#map (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/MAP<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -10437,81 +10260,82 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
-  local.set $4
-  local.get $3
+  local.set $2
+  local.get $0
   i32.load offset=4
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
-  local.set $6
+  local.set $4
   i32.const 12
   i32.const 13
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $6
+  local.set $5
+  local.get $4
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
-    local.get $8
-    local.get $9
+    local.get $6
+    local.get $7
     i32.const 3
     i32.shl
     i32.add
-    local.get $5
-    local.get $9
+    local.get $3
+    local.get $7
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $f64_i32_i32_=>_f64)
     f64.store
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $7
-  local.get $8
+  local.get $5
+  local.get $6
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $8
-  i32.store offset=4
-  local.get $7
+  local.get $5
   local.get $6
+  i32.store offset=4
+  local.get $5
+  local.get $4
   i32.store offset=8
-  local.get $7
+  local.get $5
   call $~lib/rt/pure/__retain
-  local.set $9
-  local.get $3
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
+  local.get $7
+ )
+ (func $~lib/typedarray/Float64Array#map (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/MAP<~lib/typedarray/Float64Array,f64>
  )
  (func $std/typedarray/testArrayMap<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
@@ -10637,22 +10461,12 @@
    return
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $5
   local.get $5
-  i32.const 16
-  i32.add
-  local.get $5
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $6
   local.get $6
-  i32.load
-  local.set $7
-  local.get $7
   i32.const 1
   i32.and
   if
@@ -10663,25 +10477,25 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $7
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $5
-   local.get $5
+   local.set $7
+   local.get $7
    local.get $3
    i32.ge_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $4
     i32.const 3
     i32.and
-    local.get $5
+    local.get $7
     i32.or
     i32.store
     local.get $1
@@ -10737,7 +10551,7 @@
   i32.const 16
   i32.add
  )
- (func $~lib/typedarray/Int8Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -10751,95 +10565,98 @@
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 3
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 0
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i32.store8
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 0
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $11
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $11
+  local.get $7
+ )
+ (func $~lib/typedarray/Int8Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int8Array,i8>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Int8Array,i8>
   (local $0 i32)
@@ -10965,7 +10782,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -10979,95 +10796,98 @@
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 4
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 0
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i32.store8
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 0
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $11
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $11
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint8Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint8Array,u8>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
@@ -11193,7 +11013,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8ClampedArray#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -11207,95 +11027,98 @@
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 5
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 0
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i32.store8
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 0
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $11
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $11
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint8ClampedArray,u8>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
@@ -11423,7 +11246,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int16Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -11437,95 +11260,98 @@
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 6
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 1
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i32.store16
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 1
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $11
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $11
+  local.get $7
+ )
+ (func $~lib/typedarray/Int16Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int16Array,i16>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
@@ -11651,7 +11477,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint16Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -11665,95 +11491,98 @@
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 7
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
     i32.load16_u
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 1
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i32.store16
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 1
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $11
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $11
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint16Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint16Array,u16>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
@@ -11877,7 +11706,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int32Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -11891,95 +11720,98 @@
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 8
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 2
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i32.store
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 2
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $11
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $11
+  local.get $7
+ )
+ (func $~lib/typedarray/Int32Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
@@ -12103,7 +11935,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint32Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -12117,95 +11949,98 @@
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 9
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 2
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i32.store
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 2
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $11
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $11
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint32Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint32Array,u32>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
@@ -12329,7 +12164,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int64Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -12337,101 +12172,104 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
+  (local $9 i64)
   (local $10 i32)
-  (local $11 i64)
+  (local $11 i32)
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 10
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i64_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 3
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i64.store
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 3
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $12
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $12
+  local.get $7
+ )
+ (func $~lib/typedarray/Int64Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Int64Array,i64>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
@@ -12555,7 +12393,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint64Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -12563,101 +12401,104 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
+  (local $9 i64)
   (local $10 i32)
-  (local $11 i64)
+  (local $11 i32)
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 11
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i64_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 3
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      i64.store
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 3
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $12
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $12
+  local.get $7
+ )
+ (func $~lib/typedarray/Uint64Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Uint64Array,u64>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
@@ -12781,7 +12622,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float32Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -12789,101 +12630,104 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
+  (local $9 f32)
   (local $10 i32)
-  (local $11 f32)
+  (local $11 i32)
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 12
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $f32_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 2
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      f32.store
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 2
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $12
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $12
+  local.get $7
+ )
+ (func $~lib/typedarray/Float32Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Float32Array,f32>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
@@ -13007,7 +12851,7 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float64Array#filter (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FILTER<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -13015,101 +12859,104 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
+  (local $9 f64)
   (local $10 i32)
-  (local $11 f64)
+  (local $11 i32)
   (local $12 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
-  local.set $4
+  local.set $2
   i32.const 12
   i32.const 13
   call $~lib/rt/tlsf/__alloc
-  local.set $5
-  local.get $4
+  local.set $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.const 0
   call $~lib/rt/tlsf/__alloc
-  local.set $6
-  local.get $3
+  local.set $4
+  local.get $0
   i32.load offset=4
-  local.set $7
+  local.set $5
   i32.const 0
-  local.set $8
+  local.set $6
   i32.const 0
-  local.set $9
+  local.set $7
   loop $for-loop|0
-   local.get $9
-   local.get $4
+   local.get $7
+   local.get $2
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $8
+   local.get $8
    if
+    local.get $5
     local.get $7
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
-    local.get $11
+    local.set $9
     local.get $9
-    local.get $3
+    local.get $7
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $f64_i32_i32_=>_i32)
     if
+     local.get $4
      local.get $6
-     local.get $8
-     local.tee $12
+     local.tee $10
      i32.const 1
      i32.add
-     local.set $8
-     local.get $12
+     local.set $6
+     local.get $10
      i32.const 3
      i32.shl
      i32.add
-     local.get $11
+     local.get $9
      f64.store
     end
-    local.get $9
+    local.get $7
     i32.const 1
     i32.add
-    local.set $9
+    local.set $7
     br $for-loop|0
    end
   end
-  local.get $8
+  local.get $6
   i32.const 3
   i32.shl
-  local.set $9
-  local.get $6
-  local.get $9
+  local.set $11
+  local.get $4
+  local.get $11
   call $~lib/rt/tlsf/__realloc
-  local.set $10
-  local.get $5
-  local.get $10
+  local.set $12
+  local.get $3
+  local.get $12
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $5
-  local.get $9
+  local.get $3
+  local.get $11
   i32.store offset=8
-  local.get $5
-  local.get $10
+  local.get $3
+  local.get $12
   i32.store offset=4
-  local.get $5
-  call $~lib/rt/pure/__retain
-  local.set $12
   local.get $3
+  call $~lib/rt/pure/__retain
+  local.set $7
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $12
+  local.get $7
+ )
+ (func $~lib/typedarray/Float64Array#filter (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FILTER<~lib/typedarray/Float64Array,f64>
  )
  (func $std/typedarray/testArrayFilter<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
@@ -13237,68 +13084,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int8Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int8Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int8Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 0
+    i32.shl
+    i32.add
+    i32.load8_s
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_s
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int8Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Int8Array,i8>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -13345,8 +13191,6 @@
   call $~lib/typedarray/Int8Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -13391,68 +13235,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint8Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 0
+    i32.shl
+    i32.add
+    i32.load8_u
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Uint8Array,u8>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Uint8Array,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -13497,8 +13340,6 @@
   call $~lib/typedarray/Uint8Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -13543,68 +13384,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8ClampedArray#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8ClampedArray#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint8ClampedArray#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 0
+    i32.shl
+    i32.add
+    i32.load8_u
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Uint8ClampedArray,u8>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -13649,8 +13489,6 @@
   call $~lib/typedarray/Uint8ClampedArray#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -13697,68 +13535,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int16Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int16Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int16Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_s
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int16Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Int16Array,i16>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -13805,8 +13642,6 @@
   call $~lib/typedarray/Int16Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -13851,68 +13686,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint16Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint16Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint16Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     local.get $4
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>|inlined.0
-     end
-     local.get $5
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
+    if
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint16Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Uint16Array,u16>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Uint16Array,u16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -13957,8 +13791,6 @@
   call $~lib/typedarray/Uint16Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -14001,68 +13833,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int32Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int32Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -14105,8 +13936,6 @@
   call $~lib/typedarray/Int32Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -14149,68 +13978,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint32Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint32Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Uint32Array,u32>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Uint32Array,u32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -14253,8 +14081,6 @@
   call $~lib/typedarray/Uint32Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -14297,68 +14123,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int64Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i64_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i64_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int64Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Int64Array,i64>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -14401,8 +14226,6 @@
   call $~lib/typedarray/Int64Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -14445,68 +14268,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint64Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i64_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i64_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint64Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Uint64Array,u64>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Uint64Array,u64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -14549,8 +14371,6 @@
   call $~lib/typedarray/Uint64Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -14593,68 +14413,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float32Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Float32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $f32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $f32_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Float32Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Float32Array,f32>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -14697,8 +14516,6 @@
   call $~lib/typedarray/Float32Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -14741,68 +14558,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float64Array#some (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Float64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $f64_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     local.get $5
-     local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $f64_i32_i32_=>_i32)
-     if
-      i32.const 1
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>|inlined.0
-     end
-     local.get $5
      i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 0
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 0
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Float64Array#some (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/SOME<~lib/typedarray/Float64Array,f64>
  )
  (func $std/typedarray/testArraySome<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -14845,8 +14661,6 @@
   call $~lib/typedarray/Float64Array#some
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -14893,68 +14707,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int8Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int8Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 0
+    i32.shl
+    i32.add
+    i32.load8_s
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_s
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int8Array,i8>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -15048,68 +14861,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint8Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 0
+    i32.shl
+    i32.add
+    i32.load8_u
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8Array,u8>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8Array,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -15201,68 +15013,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8ClampedArray#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8ClampedArray#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint8ClampedArray#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 0
+    i32.shl
+    i32.add
+    i32.load8_u
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint8ClampedArray,u8>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -15356,68 +15167,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int16Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int16Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int16Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_s
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_s
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int16Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int16Array,i16>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -15511,68 +15321,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint16Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
-   local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
-   local.set $5
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint16Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   call $~lib/typedarray/Uint16Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $4
+   i32.lt_s
+   local.set $5
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    i32.load16_u
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint16Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint16Array,u16>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint16Array,u16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -15662,68 +15471,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -15811,68 +15619,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint32Array,u32>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint32Array,u32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -15960,68 +15767,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i64_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i64_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Int64Array,i64>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -16109,68 +15915,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 3
+    i32.shl
+    i32.add
+    i64.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $i64_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $i64_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Uint64Array,u64>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Uint64Array,u64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -16258,68 +16063,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Float32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    f32.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $f32_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $f32_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Float32Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float32Array,f32>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -16407,68 +16211,67 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Float64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
+   local.get $5
+   if
+    local.get $2
+    local.get $3
+    i32.const 3
+    i32.shl
+    i32.add
+    f64.load
+    local.get $3
+    local.get $0
+    i32.const 3
+    global.set $~argumentsLength
+    local.get $1
+    call_indirect (type $f64_i32_i32_=>_i32)
     if
-     local.get $4
-     local.get $5
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     local.get $5
      local.get $3
-     i32.const 3
-     global.set $~argumentsLength
-     local.get $2
-     call_indirect (type $f64_i32_i32_=>_i32)
-     if
-      local.get $5
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>|inlined.0
-     end
-     local.get $5
-     i32.const 1
-     i32.add
-     local.set $5
-     br $for-loop|0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const -1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const -1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Float64Array#findIndex (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FIND_INDEX<~lib/typedarray/Float64Array,f64>
  )
  (func $std/typedarray/testArrayFindIndex<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -16562,71 +16365,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int8Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int8Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int8Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 0
-      i32.shl
-      i32.add
-      i32.load8_s
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 0
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i32.load8_s
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int8Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Int8Array,i8>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Int8Array,i8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -16673,8 +16475,6 @@
   call $~lib/typedarray/Int8Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -16721,71 +16521,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint8Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 0
-      i32.shl
-      i32.add
-      i32.load8_u
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 0
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i32.load8_u
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Uint8Array,u8>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8Array,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -16830,8 +16629,6 @@
   call $~lib/typedarray/Uint8Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -16878,71 +16675,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint8ClampedArray#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8ClampedArray#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint8ClampedArray#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 0
-      i32.shl
-      i32.add
-      i32.load8_u
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 0
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i32.load8_u
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Uint8ClampedArray,u8>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint8ClampedArray,u8>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -16987,8 +16783,6 @@
   call $~lib/typedarray/Uint8ClampedArray#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -17037,71 +16831,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int16Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int16Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int16Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 1
-      i32.shl
-      i32.add
-      i32.load16_s
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>|inlined.0
-     end
-     local.get $5
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
      i32.const 1
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i32.load16_s
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int16Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Int16Array,i16>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Int16Array,i16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -17148,8 +16941,6 @@
   call $~lib/typedarray/Int16Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -17196,71 +16987,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint16Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint16Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint16Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 1
-      i32.shl
-      i32.add
-      i32.load16_u
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>|inlined.0
-     end
-     local.get $5
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
      i32.const 1
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i32.load16_u
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint16Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Uint16Array,u16>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint16Array,u16>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -17305,8 +17095,6 @@
   call $~lib/typedarray/Uint16Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -17351,71 +17139,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int32Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 2
-      i32.shl
-      i32.add
-      i32.load
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 2
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i32.load
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int32Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Int32Array,i32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -17458,8 +17245,6 @@
   call $~lib/typedarray/Int32Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -17504,71 +17289,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint32Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 2
-      i32.shl
-      i32.add
-      i32.load
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Uint32Array,u32>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 2
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i32.load
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint32Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Uint32Array,u32>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint32Array,u32>~anonymous|1 (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -17611,8 +17395,6 @@
   call $~lib/typedarray/Uint32Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -17657,71 +17439,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Int64Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Int64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 3
-      i32.shl
-      i32.add
-      i64.load
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i64_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 3
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i64.load
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i64_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Int64Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Int64Array,i64>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Int64Array,i64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -17764,8 +17545,6 @@
   call $~lib/typedarray/Int64Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -17810,71 +17589,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Uint64Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Uint64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 3
-      i32.shl
-      i32.add
-      i64.load
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $i64_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Uint64Array,u64>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 3
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     i64.load
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $i64_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint64Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Uint64Array,u64>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Uint64Array,u64>~anonymous|1 (param $0 i64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -17917,8 +17695,6 @@
   call $~lib/typedarray/Uint64Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -18211,71 +17987,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float32Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float32Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Float32Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 2
-      i32.shl
-      i32.add
-      f32.load
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $f32_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 2
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     f32.load
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $f32_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Float32Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Float32Array,f32>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Float32Array,f32>~anonymous|1 (param $0 f32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -18318,8 +18093,6 @@
   call $~lib/typedarray/Float32Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -18618,71 +18391,70 @@
   call $~lib/rt/pure/__release
   local.get $3
  )
- (func $~lib/typedarray/Float64Array#every (param $0 i32) (param $1 i32) (result i32)
+ (func $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (result i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  block $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $3
-   local.get $1
-   local.set $2
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  i32.load offset=4
+  local.set $2
+  i32.const 0
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float64Array#get:length
+  local.set $4
+  loop $for-loop|0
    local.get $3
-   i32.load offset=4
-   local.set $4
-   i32.const 0
+   local.get $4
+   i32.lt_s
    local.set $5
-   local.get $3
-   call $~lib/typedarray/Float64Array#get:length
-   local.set $6
-   loop $for-loop|0
-    local.get $5
-    local.get $6
-    i32.lt_s
-    local.set $7
-    local.get $7
-    if
-     block $for-continue|0
-      local.get $4
-      local.get $5
-      i32.const 3
-      i32.shl
-      i32.add
-      f64.load
-      local.get $5
-      local.get $3
-      i32.const 3
-      global.set $~argumentsLength
-      local.get $2
-      call_indirect (type $f64_i32_i32_=>_i32)
-      if
-       br $for-continue|0
-      end
-      i32.const 0
-      local.set $8
-      local.get $3
-      call $~lib/rt/pure/__release
-      local.get $8
-      br $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>|inlined.0
-     end
-     local.get $5
-     i32.const 1
+   local.get $5
+   if
+    block $for-continue|0
+     local.get $2
+     local.get $3
+     i32.const 3
+     i32.shl
      i32.add
-     local.set $5
-     br $for-loop|0
+     f64.load
+     local.get $3
+     local.get $0
+     i32.const 3
+     global.set $~argumentsLength
+     local.get $1
+     call_indirect (type $f64_i32_i32_=>_i32)
+     if
+      br $for-continue|0
+     end
+     i32.const 0
+     local.set $6
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $for-loop|0
    end
-   i32.const 1
-   local.set $6
-   local.get $3
-   call $~lib/rt/pure/__release
-   local.get $6
   end
+  i32.const 1
+  local.set $4
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $4
+ )
+ (func $~lib/typedarray/Float64Array#every (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/EVERY<~lib/typedarray/Float64Array,f64>
  )
  (func $std/typedarray/testArrayEvery<~lib/typedarray/Float64Array,f64>~anonymous|1 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -18725,8 +18497,6 @@
   call $~lib/typedarray/Float64Array#every
   local.set $2
   local.get $2
-  i32.const 0
-  i32.ne
   i32.eqz
   if
    i32.const 0
@@ -18816,55 +18586,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Int8Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Int8Array,i8>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Int8Array,i8>
   (local $0 i32)
   (local $1 i32)
@@ -18984,55 +18755,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Uint8Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Uint8Array,u8>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
   (local $1 i32)
@@ -19146,55 +18918,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Uint8ClampedArray#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Uint8ClampedArray,u8>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
   (local $1 i32)
@@ -19312,55 +19085,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Int16Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Int16Array,i16>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
   (local $1 i32)
@@ -19480,55 +19254,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 1
     i32.shl
     i32.add
     i32.load16_u
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Uint16Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Uint16Array,u16>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
   (local $1 i32)
@@ -19638,55 +19413,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Int32Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Int32Array,i32>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
   (local $1 i32)
@@ -19790,55 +19566,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Uint32Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Uint32Array,u32>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
   (local $1 i32)
@@ -19943,55 +19720,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i64_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Int64Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Int64Array,i64>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
   (local $1 i32)
@@ -20099,55 +19877,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $i64_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Uint64Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Uint64Array,u64>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
   (local $1 i32)
@@ -20255,55 +20034,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $f32_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Float32Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Float32Array,f32>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
   (local $1 i32)
@@ -20411,55 +20191,56 @@
   local.get $2
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#forEach (param $0 i32) (param $1 i32)
+ (func $~lib/typedarray/FOREACH<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $3
-  local.get $1
-  local.set $2
-  local.get $3
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $4
+  local.set $2
   i32.const 0
-  local.set $5
-  local.get $3
+  local.set $3
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
-  local.set $6
+  local.set $4
   loop $for-loop|0
-   local.get $5
-   local.get $6
+   local.get $3
+   local.get $4
    i32.lt_s
-   local.set $7
-   local.get $7
+   local.set $5
+   local.get $5
    if
-    local.get $4
-    local.get $5
+    local.get $2
+    local.get $3
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.get $5
     local.get $3
+    local.get $0
     i32.const 3
     global.set $~argumentsLength
-    local.get $2
+    local.get $1
     call_indirect (type $f64_i32_i32_=>_none)
-    local.get $5
+    local.get $3
     i32.const 1
     i32.add
-    local.set $5
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $3
+  local.get $0
   call $~lib/rt/pure/__release
  )
+ (func $~lib/typedarray/Float64Array#forEach (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  call $~lib/typedarray/FOREACH<~lib/typedarray/Float64Array,f64>
+ )
  (func $std/typedarray/testArrayForEach<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
   (local $1 i32)
@@ -20514,7 +20295,7 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int8Array,i8> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -20522,61 +20303,64 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 0
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 0
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i32.load8_s
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i32.load8_s
     i32.store8
+    local.get $6
     local.get $7
-    local.get $8
     i32.store8
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
+ )
+ (func $~lib/typedarray/Int8Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int8Array,i8>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Int8Array,i8>
   (local $0 i32)
@@ -20763,7 +20547,7 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Uint8Array,u8> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -20771,168 +20555,171 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 0
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 0
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i32.load8_u
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i32.load8_u
     i32.store8
+    local.get $6
     local.get $7
-    local.get $8
     i32.store8
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Uint8Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint8Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint8Array,u8>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 4
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 0
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 0
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8Array,u8>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Uint8Array,u8>
   (local $0 i32)
@@ -21113,7 +20900,7 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -21121,168 +20908,171 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 0
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 0
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i32.load8_u
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i32.load8_u
     i32.store8
+    local.get $6
     local.get $7
-    local.get $8
     i32.store8
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Uint8ClampedArray#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint8ClampedArray#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint8ClampedArray,u8>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 5
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 0
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 0
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint8ClampedArray,u8>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Uint8ClampedArray,u8>
   (local $0 i32)
@@ -21463,7 +21253,7 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int16Array,i16> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -21471,168 +21261,171 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 1
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 1
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i32.load16_s
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i32.load16_s
     i32.store16
+    local.get $6
     local.get $7
-    local.get $8
     i32.store16
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Int16Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Int16Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int16Array,i16>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 6
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 1
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 1
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Int16Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int16Array,i16>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Int16Array,i16>
   (local $0 i32)
@@ -21819,7 +21612,7 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Uint16Array,u16> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -21827,168 +21620,171 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 1
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 1
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i32.load16_u
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i32.load16_u
     i32.store16
+    local.get $6
     local.get $7
-    local.get $8
     i32.store16
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Uint16Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint16Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint16Array,u16>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 7
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 1
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 1
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint16Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint16Array,u16>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Uint16Array,u16>
   (local $0 i32)
@@ -22169,7 +21965,7 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int32Array,i32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -22177,61 +21973,64 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i32.load
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i32.load
     i32.store
+    local.get $6
     local.get $7
-    local.get $8
     i32.store
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
+ )
+ (func $~lib/typedarray/Int32Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int32Array,i32>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Int32Array,i32>
   (local $0 i32)
@@ -22406,7 +22205,7 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Uint32Array,u32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -22414,168 +22213,171 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i32.load
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i32.load
     i32.store
+    local.get $6
     local.get $7
-    local.get $8
     i32.store
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Uint32Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint32Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint32Array,u32>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 9
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 2
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 2
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint32Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint32Array,u32>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Uint32Array,u32>
   (local $0 i32)
@@ -22750,176 +22552,179 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Int64Array,i64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
+  (local $7 i64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 3
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 3
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i64.load
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i64.load
     i64.store
+    local.get $6
     local.get $7
-    local.get $8
     i64.store
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Int64Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Int64Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Int64Array,i64>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 10
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 3
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 3
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Int64Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Int64Array,i64>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Int64Array,i64>
   (local $0 i32)
@@ -23097,176 +22902,179 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Uint64Array,u64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
+  (local $7 i64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 3
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 3
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     i64.load
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     i64.load
     i64.store
+    local.get $6
     local.get $7
-    local.get $8
     i64.store
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Uint64Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint64Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Uint64Array,u64>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 11
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 3
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 3
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Uint64Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Uint64Array,u64>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Uint64Array,u64>
   (local $0 i32)
@@ -23444,176 +23252,179 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Float32Array,f32> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 f32)
+  (local $7 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     f32.load
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     f32.load
     f32.store
+    local.get $6
     local.get $7
-    local.get $8
     f32.store
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
  )
- (func $~lib/typedarray/Float32Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Float32Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Float32Array,f32>
+ )
+ (func $~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
+  local.set $0
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
-   local.get $4
+   local.get $3
+   local.get $1
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $1
+   local.tee $4
+   local.get $3
+   local.tee $5
    local.get $4
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $4
-  local.get $3
+  local.set $1
+  local.get $2
   i32.const 0
   i32.lt_s
   if (result i32)
-   local.get $6
    local.get $3
+   local.get $2
    i32.add
-   local.tee $7
+   local.tee $4
    i32.const 0
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.gt_s
    select
   else
+   local.get $2
+   local.tee $4
    local.get $3
-   local.tee $7
-   local.get $6
-   local.tee $8
-   local.get $7
-   local.get $8
+   local.tee $5
+   local.get $4
+   local.get $5
    i32.lt_s
    select
   end
-  local.set $3
-  local.get $3
-  local.tee $7
+  local.set $2
+  local.get $2
+  local.tee $4
+  local.get $1
+  local.tee $5
   local.get $4
-  local.tee $8
-  local.get $7
-  local.get $8
+  local.get $5
   i32.gt_s
   select
-  local.set $3
+  local.set $2
   i32.const 12
   i32.const 12
   call $~lib/rt/tlsf/__alloc
-  local.set $7
-  local.get $7
-  local.get $5
+  local.set $6
+  local.get $6
+  local.get $0
   i32.load
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $7
-  local.get $5
+  local.get $6
+  local.get $0
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.const 2
   i32.shl
   i32.add
   i32.store offset=4
-  local.get $7
-  local.get $3
-  local.get $4
+  local.get $6
+  local.get $2
+  local.get $1
   i32.sub
   i32.const 2
   i32.shl
   i32.store offset=8
-  local.get $7
+  local.get $6
   call $~lib/rt/pure/__retain
-  local.set $8
-  local.get $5
+  local.set $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $4
+ )
+ (func $~lib/typedarray/Float32Array#subarray (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SUBARRAY<~lib/typedarray/Float32Array,f32>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Float32Array,f32>
   (local $0 i32)
@@ -23791,69 +23602,72 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#reverse (param $0 i32) (result i32)
+ (func $~lib/typedarray/REVERSE<~lib/typedarray/Float64Array,f64> (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 f64)
+  (local $7 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
+  local.set $0
+  local.get $0
   i32.load offset=4
-  local.set $2
+  local.set $1
   i32.const 0
-  local.set $3
-  local.get $1
+  local.set $2
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.const 1
   i32.sub
-  local.set $4
+  local.set $3
   loop $for-loop|0
+   local.get $2
    local.get $3
-   local.get $4
    i32.lt_u
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    if
+    local.get $1
     local.get $2
-    local.get $3
     i32.const 3
     i32.shl
     i32.add
-    local.set $6
-    local.get $2
-    local.get $4
+    local.set $5
+    local.get $1
+    local.get $3
     i32.const 3
     i32.shl
     i32.add
-    local.set $7
-    local.get $6
+    local.set $6
+    local.get $5
     f64.load
-    local.set $8
+    local.set $7
+    local.get $5
     local.get $6
-    local.get $7
     f64.load
     f64.store
+    local.get $6
     local.get $7
-    local.get $8
     f64.store
-    local.get $3
+    local.get $2
     i32.const 1
     i32.add
-    local.set $3
-    local.get $4
+    local.set $2
+    local.get $3
     i32.const 1
     i32.sub
-    local.set $4
+    local.set $3
     br $for-loop|0
    end
   end
-  local.get $1
+  local.get $0
+ )
+ (func $~lib/typedarray/Float64Array#reverse (param $0 i32) (result i32)
+  local.get $0
+  call $~lib/typedarray/REVERSE<~lib/typedarray/Float64Array,f64>
  )
  (func $std/typedarray/testArrayReverse<~lib/typedarray/Float64Array,f64>
   (local $0 i32)
@@ -24031,201 +23845,195 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int8Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Int8Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
-    i32.add
-    local.tee $8
+    local.get $3
     i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i32.shl
+    i32.add
+    i32.load8_s
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_s
-     local.get $4
-     i32.const 24
-     i32.shl
-     i32.const 24
-     i32.shr_s
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Int8Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Int8Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int8Array,i8>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int8Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Int8Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 0
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i32.load8_s
+    local.get $1
+    i32.const 24
+    i32.shl
+    i32.const 24
+    i32.shr_s
+    i32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_s
-     local.get $4
-     i32.const 24
-     i32.shl
-     i32.const 24
-     i32.shr_s
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Int8Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int8Array,i8>
  )
  (func $~lib/typedarray/Int8Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $1of1
@@ -24726,197 +24534,191 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Uint8Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
-    i32.add
-    local.tee $8
+    local.get $3
     i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i32.shl
+    i32.add
+    i32.load8_u
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $4
-     i32.const 255
-     i32.and
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Uint8Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint8Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8Array,u8>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Uint8Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 0
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i32.load8_u
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $4
-     i32.const 255
-     i32.and
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint8Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8Array,u8>
  )
  (func $~lib/typedarray/Uint8Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $1of1
@@ -25415,197 +25217,191 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8ClampedArray#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Uint8ClampedArray#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
-    i32.add
-    local.tee $8
+    local.get $3
     i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i32.shl
+    i32.add
+    i32.load8_u
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $4
-     i32.const 255
-     i32.and
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Uint8ClampedArray#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint8ClampedArray#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint8ClampedArray#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Uint8ClampedArray#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 0
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i32.load8_u
+    local.get $1
+    i32.const 255
+    i32.and
+    i32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 0
-     i32.shl
-     i32.add
-     i32.load8_u
-     local.get $4
-     i32.const 255
-     i32.and
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint8ClampedArray,u8>
  )
  (func $~lib/typedarray/Uint8ClampedArray#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $1of1
@@ -26104,201 +25900,195 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int16Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Int16Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 1
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i32.load16_s
+    local.get $1
+    i32.const 16
+    i32.shl
+    i32.const 16
+    i32.shr_s
+    i32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_s
-     local.get $4
-     i32.const 16
-     i32.shl
-     i32.const 16
-     i32.shr_s
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Int16Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Int16Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int16Array,i16>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int16Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Int16Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 1
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i32.load16_s
+    local.get $1
+    i32.const 16
+    i32.shl
+    i32.const 16
+    i32.shr_s
+    i32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_s
-     local.get $4
-     i32.const 16
-     i32.shl
-     i32.const 16
-     i32.shr_s
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Int16Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int16Array,i16>
  )
  (func $~lib/typedarray/Int16Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $1of1
@@ -26799,197 +26589,191 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint16Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Uint16Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 1
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i32.load16_u
+    local.get $1
+    i32.const 65535
+    i32.and
+    i32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     local.get $4
-     i32.const 65535
-     i32.and
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Uint16Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint16Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint16Array,u16>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint16Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Uint16Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 1
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i32.load16_u
+    local.get $1
+    i32.const 65535
+    i32.and
+    i32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 1
-     i32.shl
-     i32.add
-     i32.load16_u
-     local.get $4
-     i32.const 65535
-     i32.and
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint16Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint16Array,u16>
  )
  (func $~lib/typedarray/Uint16Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $1of1
@@ -27488,193 +27272,187 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int32Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Int32Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i32.load
+    local.get $1
+    i32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $4
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Int32Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Int32Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int32Array,i32>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int32Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Int32Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i32.load
+    local.get $1
+    i32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $4
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Int32Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int32Array,i32>
  )
  (func $~lib/typedarray/Int32Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $1of1
@@ -28171,193 +27949,187 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint32Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Uint32Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i32.load
+    local.get $1
+    i32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $4
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Uint32Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint32Array#indexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint32Array,u32>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint32Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Uint32Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i32.load
+    local.get $1
+    i32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     i32.load
-     local.get $4
-     i32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint32Array#lastIndexOf (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint32Array,u32>
  )
  (func $~lib/typedarray/Uint32Array#lastIndexOf@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $1of1
@@ -28854,193 +28626,187 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#indexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 i64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int64Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Int64Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i64.load
+    local.get $1
+    i64.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $4
-     i64.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Int64Array#lastIndexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Int64Array#indexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Int64Array,i64>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 i64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Int64Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Int64Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i64.load
+    local.get $1
+    i64.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $4
-     i64.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Int64Array#lastIndexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Int64Array,i64>
  )
  (func $~lib/typedarray/Int64Array#lastIndexOf@varargs (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   block $1of1
@@ -29538,193 +29304,187 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#indexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 i64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint64Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Uint64Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    i64.load
+    local.get $1
+    i64.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $4
-     i64.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Uint64Array#lastIndexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Uint64Array#indexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Uint64Array,u64>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 i64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Uint64Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Uint64Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    i64.load
+    local.get $1
+    i64.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 3
-     i32.shl
-     i32.add
-     i64.load
-     local.get $4
-     i64.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Uint64Array#lastIndexOf (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Uint64Array,u64>
  )
  (func $~lib/typedarray/Uint64Array#lastIndexOf@varargs (param $0 i32) (param $1 i64) (param $2 i32) (result i32)
   block $1of1
@@ -30222,193 +29982,187 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#indexOf (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 f32)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float32Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Float32Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    f32.load
+    local.get $1
+    f32.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     local.get $4
-     f32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Float32Array#lastIndexOf (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Float32Array#indexOf (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float32Array,f32>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 f32)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float32Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Float32Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    f32.load
+    local.get $1
+    f32.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     local.get $4
-     f32.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Float32Array#lastIndexOf (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float32Array,f32>
  )
  (func $~lib/typedarray/Float32Array#lastIndexOf@varargs (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   block $1of1
@@ -30906,193 +30660,187 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#indexOf (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 f64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float64Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
+   i32.const 1
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const -1
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Float64Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $7
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $5
+   local.get $5
    if
     local.get $7
-    local.get $6
+    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    f64.load
+    local.get $1
+    f64.eq
     if
-     local.get $8
-     local.get $6
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     local.get $4
-     f64.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.add
+     local.get $3
      local.set $6
-     br $while-continue|0
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $6
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
  )
- (func $~lib/typedarray/Float64Array#lastIndexOf (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Float64Array#indexOf (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INDEX_OF<~lib/typedarray/Float64Array,f64>
+ )
+ (func $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 f64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  block $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float64Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if
+   i32.const -1
    local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
+   local.get $0
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
    local.set $3
+  else
    local.get $3
-   local.set $6
-   local.get $5
-   call $~lib/typedarray/Float64Array#get:length
-   local.set $7
-   local.get $7
-   i32.const 0
-   i32.eq
+   local.get $4
+   i32.ge_s
    if
-    i32.const -1
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
+    local.get $4
+    i32.const 1
+    i32.sub
+    local.set $3
    end
-   local.get $6
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $6
+  loop $while-continue|0
+   local.get $3
    i32.const 0
-   i32.lt_s
+   i32.ge_s
+   local.set $5
+   local.get $5
    if
-    local.get $7
     local.get $6
+    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.set $6
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
+    f64.load
+    local.get $1
+    f64.eq
     if
+     local.get $3
+     local.set $7
+     local.get $0
+     call $~lib/rt/pure/__release
      local.get $7
-     i32.const 1
-     i32.sub
-     local.set $6
-    end
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
-    i32.const 0
-    i32.ge_s
-    local.set $9
-    local.get $9
-    if
-     local.get $8
-     local.get $6
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     local.get $4
-     f64.eq
-     if
-      local.get $6
-      local.set $10
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $10
-      br $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>|inlined.0
-     end
-     local.get $6
-     i32.const 1
-     i32.sub
-     local.set $6
-     br $while-continue|0
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.sub
+    local.set $3
+    br $while-continue|0
    end
-   i32.const -1
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
   end
+  i32.const -1
+  local.set $5
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $5
+ )
+ (func $~lib/typedarray/Float64Array#lastIndexOf (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/LAST_INDEX_OF<~lib/typedarray/Float64Array,f64>
  )
  (func $~lib/typedarray/Float64Array#lastIndexOf@varargs (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   block $1of1
@@ -31590,231 +31338,225 @@
   local.get $6
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#includes (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+ (func $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 f64)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
+  (local $7 f64)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 f64)
-  (local $11 i32)
-  block $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  i32.const 1
+  drop
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float64Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
    i32.const 1
-   drop
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const 0
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Float64Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const 0
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $6
+   local.get $6
    if
-    local.get $7
-    local.get $6
+    local.get $5
+    local.get $3
+    i32.const 3
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
+    f64.load
+    local.set $7
     local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    local.get $1
+    f64.eq
+    if (result i32)
+     i32.const 1
+    else
+     local.get $7
+     local.get $7
+     f64.ne
+     local.get $1
+     local.get $1
+     f64.ne
+     i32.and
+    end
     if
-     local.get $8
-     local.get $6
-     i32.const 3
-     i32.shl
-     i32.add
-     f64.load
-     local.set $10
-     local.get $10
-     local.get $4
-     f64.eq
-     if (result i32)
-      i32.const 1
-     else
-      local.get $10
-      local.get $10
-      f64.ne
-      local.get $4
-      local.get $4
-      f64.ne
-      i32.and
-     end
-     if
-      i32.const 1
-      local.set $11
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $11
-      br $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0
-     end
-     local.get $6
      i32.const 1
-     i32.add
-     local.set $6
-     br $while-continue|0
+     local.set $8
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $8
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const 0
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
-   br $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>|inlined.0
   end
+  i32.const 0
+  local.set $6
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $6
+  return
  )
- (func $~lib/typedarray/Float32Array#includes (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/Float64Array#includes (param $0 i32) (param $1 f64) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INCLUDES<~lib/typedarray/Float64Array,f64>
+ )
+ (func $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
   (local $3 i32)
-  (local $4 f32)
+  (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
+  (local $7 f32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 f32)
-  (local $11 i32)
-  block $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0 (result i32)
-   local.get $0
-   call $~lib/rt/pure/__retain
-   local.set $5
-   local.get $1
-   local.set $4
-   local.get $2
-   local.set $3
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  i32.const 1
+  drop
+  local.get $2
+  local.set $3
+  local.get $0
+  call $~lib/typedarray/Float32Array#get:length
+  local.set $4
+  local.get $4
+  i32.const 0
+  i32.eq
+  if (result i32)
    i32.const 1
-   drop
+  else
    local.get $3
-   local.set $6
+   local.get $4
+   i32.ge_s
+  end
+  if
+   i32.const 0
+   local.set $5
+   local.get $0
+   call $~lib/rt/pure/__release
    local.get $5
-   call $~lib/typedarray/Float32Array#get:length
-   local.set $7
-   local.get $7
+   return
+  end
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   local.get $4
+   local.get $3
+   i32.add
+   local.tee $5
    i32.const 0
-   i32.eq
-   if (result i32)
-    i32.const 1
-   else
-    local.get $6
-    local.get $7
-    i32.ge_s
-   end
-   if
-    i32.const 0
-    local.set $8
-    local.get $5
-    call $~lib/rt/pure/__release
-    local.get $8
-    br $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0
-   end
+   local.tee $6
+   local.get $5
    local.get $6
-   i32.const 0
+   i32.gt_s
+   select
+   local.set $3
+  end
+  local.get $0
+  i32.load offset=4
+  local.set $5
+  loop $while-continue|0
+   local.get $3
+   local.get $4
    i32.lt_s
+   local.set $6
+   local.get $6
    if
-    local.get $7
-    local.get $6
+    local.get $5
+    local.get $3
+    i32.const 2
+    i32.shl
     i32.add
-    local.tee $8
-    i32.const 0
-    local.tee $9
-    local.get $8
-    local.get $9
-    i32.gt_s
-    select
-    local.set $6
-   end
-   local.get $5
-   i32.load offset=4
-   local.set $8
-   loop $while-continue|0
-    local.get $6
+    f32.load
+    local.set $7
     local.get $7
-    i32.lt_s
-    local.set $9
-    local.get $9
+    local.get $1
+    f32.eq
+    if (result i32)
+     i32.const 1
+    else
+     local.get $7
+     local.get $7
+     f32.ne
+     local.get $1
+     local.get $1
+     f32.ne
+     i32.and
+    end
     if
-     local.get $8
-     local.get $6
-     i32.const 2
-     i32.shl
-     i32.add
-     f32.load
-     local.set $10
-     local.get $10
-     local.get $4
-     f32.eq
-     if (result i32)
-      i32.const 1
-     else
-      local.get $10
-      local.get $10
-      f32.ne
-      local.get $4
-      local.get $4
-      f32.ne
-      i32.and
-     end
-     if
-      i32.const 1
-      local.set $11
-      local.get $5
-      call $~lib/rt/pure/__release
-      local.get $11
-      br $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0
-     end
-     local.get $6
      i32.const 1
-     i32.add
-     local.set $6
-     br $while-continue|0
+     local.set $8
+     local.get $0
+     call $~lib/rt/pure/__release
+     local.get $8
+     return
     end
+    local.get $3
+    i32.const 1
+    i32.add
+    local.set $3
+    br $while-continue|0
    end
-   i32.const 0
-   local.set $9
-   local.get $5
-   call $~lib/rt/pure/__release
-   local.get $9
-   br $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>|inlined.0
   end
+  i32.const 0
+  local.set $6
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $6
+  return
+ )
+ (func $~lib/typedarray/Float32Array#includes (param $0 i32) (param $1 f32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/INCLUDES<~lib/typedarray/Float32Array,f32>
  )
  (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
   local.get $0
@@ -32011,13 +31753,20 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
  (func $~lib/util/number/itoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
   local.get $0
   i32.eqz
   if
@@ -32047,19 +31796,9 @@
   call $~lib/rt/tlsf/__alloc
   local.set $3
   local.get $3
-  local.set $6
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $6
-  local.get $5
-  local.get $4
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $1
   if
    local.get $3
@@ -32098,9 +31837,6 @@
  (func $~lib/util/number/itoa_stream<i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -32181,23 +31917,13 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
   i32.const 24
   i32.shl
   i32.const 24
   i32.shr_s
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/string/String#substring (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -32744,9 +32470,6 @@
  (func $~lib/util/number/utoa32 (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
   local.get $0
   i32.eqz
   if
@@ -32763,19 +32486,9 @@
   call $~lib/rt/tlsf/__alloc
   local.set $2
   local.get $2
-  local.set $5
   local.get $0
-  local.set $4
   local.get $1
-  local.set $3
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $5
-  local.get $4
-  local.get $3
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $2
   call $~lib/rt/pure/__retain
  )
@@ -32798,9 +32511,6 @@
  (func $~lib/util/number/itoa_stream<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -32847,21 +32557,11 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
   i32.const 255
   i32.and
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -33212,9 +32912,6 @@
  (func $~lib/util/number/itoa_stream<i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -33295,23 +32992,13 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
   i32.const 16
   i32.shl
   i32.const 16
   i32.shr_s
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -33568,9 +33255,6 @@
  (func $~lib/util/number/itoa_stream<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -33617,21 +33301,11 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
   i32.const 65535
   i32.and
-  local.set $6
   local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
  (func $~lib/util/string/joinIntegerArray<u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
@@ -33886,9 +33560,6 @@
  (func $~lib/util/number/itoa_stream<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
   local.get $0
   local.get $1
   i32.const 1
@@ -33953,332 +33624,309 @@
   i32.add
   local.set $4
   local.get $0
-  local.set $7
   local.get $2
+  local.get $4
+  call $~lib/util/number/utoa32_core
+  local.get $4
+ )
+ (func $~lib/util/string/joinIntegerArray<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  (local $9 i32)
+  (local $10 i32)
+  local.get $2
+  call $~lib/rt/pure/__retain
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $3
+  i32.const 0
+  i32.lt_s
+  if
+   i32.const 1920
+   local.set $4
+   local.get $2
+   call $~lib/rt/pure/__release
+   local.get $4
+   return
+  end
+  local.get $3
+  i32.eqz
+  if
+   local.get $0
+   i32.load
+   call $~lib/util/number/itoa<i32>
+   local.tee $4
+   local.set $5
+   local.get $2
+   call $~lib/rt/pure/__release
+   local.get $5
+   return
+  end
+  local.get $2
+  call $~lib/string/String#get:length
   local.set $6
+  i32.const 11
+  local.get $6
+  i32.add
+  local.get $3
+  i32.mul
+  i32.const 11
+  i32.add
+  local.set $7
+  local.get $7
+  i32.const 1
+  i32.shl
+  i32.const 1
+  call $~lib/rt/tlsf/__alloc
+  call $~lib/rt/pure/__retain
+  local.set $8
+  i32.const 0
+  local.set $9
+  i32.const 0
+  local.set $4
+  loop $for-loop|0
+   local.get $4
+   local.get $3
+   i32.lt_s
+   local.set $5
+   local.get $5
+   if
+    local.get $0
+    local.get $4
+    i32.const 2
+    i32.shl
+    i32.add
+    i32.load
+    local.set $10
+    local.get $9
+    local.get $8
+    local.get $9
+    local.get $10
+    call $~lib/util/number/itoa_stream<i32>
+    i32.add
+    local.set $9
+    local.get $6
+    if
+     local.get $8
+     local.get $9
+     i32.const 1
+     i32.shl
+     i32.add
+     local.get $2
+     local.get $6
+     i32.const 1
+     i32.shl
+     call $~lib/memory/memory.copy
+     local.get $9
+     local.get $6
+     i32.add
+     local.set $9
+    end
+    local.get $4
+    i32.const 1
+    i32.add
+    local.set $4
+    br $for-loop|0
+   end
+  end
+  local.get $0
+  local.get $3
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load
+  local.set $10
+  local.get $9
+  local.get $8
+  local.get $9
+  local.get $10
+  call $~lib/util/number/itoa_stream<i32>
+  i32.add
+  local.set $9
+  local.get $7
+  local.get $9
+  i32.gt_s
+  if
+   local.get $8
+   i32.const 0
+   local.get $9
+   call $~lib/string/String#substring
+   local.set $4
+   local.get $2
+   call $~lib/rt/pure/__release
+   local.get $8
+   call $~lib/rt/pure/__release
+   local.get $4
+   return
+  end
+  local.get $8
+  local.set $4
+  local.get $2
+  call $~lib/rt/pure/__release
   local.get $4
-  local.set $5
+ )
+ (func $~lib/typedarray/Int32Array#join (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  i32.load offset=4
+  local.get $0
+  call $~lib/typedarray/Int32Array#get:length
+  local.get $1
+  call $~lib/util/string/joinIntegerArray<i32>
+  local.set $2
+  local.get $1
+  call $~lib/rt/pure/__release
+  local.get $2
+ )
+ (func $~lib/typedarray/Int32Array#toString (param $0 i32) (result i32)
+  local.get $0
+  i32.const 2368
+  call $~lib/typedarray/Int32Array#join
+ )
+ (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const 0
+  i32.const 5
+  call $~lib/typedarray/Int32Array#constructor
+  local.tee $0
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $1
   i32.const 0
   i32.const 1
-  i32.ge_s
+  call $~lib/typedarray/Int32Array#__set
+  local.get $1
+  i32.const 1
+  i32.const 2
+  call $~lib/typedarray/Int32Array#__set
+  local.get $1
+  i32.const 2
+  i32.const 3
+  call $~lib/typedarray/Int32Array#__set
+  local.get $1
+  i32.const 3
+  i32.const 4
+  call $~lib/typedarray/Int32Array#__set
+  local.get $1
+  i32.const 4
+  i32.const 5
+  call $~lib/typedarray/Int32Array#__set
+  i32.const 0
+  drop
+  local.get $1
+  i32.const 2368
+  call $~lib/typedarray/Int32Array#join
+  local.tee $2
+  i32.const 2400
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 304
+   i32.const 629
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  call $~lib/typedarray/Int32Array#toString
+  local.tee $3
+  i32.const 2400
+  call $~lib/string/String.__eq
+  i32.eqz
+  if
+   i32.const 0
+   i32.const 304
+   i32.const 630
+   i32.const 5
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $2
+  call $~lib/rt/pure/__release
+  local.get $3
+  call $~lib/rt/pure/__release
+  local.get $0
+  call $~lib/rt/pure/__release
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/util/number/itoa<u32> (param $0 i32) (result i32)
+  i32.const 1
+  i32.eqz
+  drop
+  i32.const 0
+  drop
+  i32.const 4
+  i32.const 4
+  i32.le_u
+  drop
+  local.get $0
+  call $~lib/util/number/utoa32
+  return
+ )
+ (func $~lib/util/number/itoa_stream<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $0
+  i32.const 0
+  local.set $3
+  i32.const 0
+  drop
+  i32.const 0
+  i32.const 1
+  i32.le_s
+  drop
+  i32.const 0
+  drop
+  local.get $2
+  i32.const 10
+  i32.lt_u
+  if
+   local.get $0
+   local.get $2
+   i32.const 48
+   i32.or
+   i32.store16
+   i32.const 1
+   return
+  end
+  local.get $3
+  local.set $4
+  i32.const 4
+  i32.const 4
+  i32.le_u
   drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
+  local.get $4
+  local.get $2
+  call $~lib/util/number/decimalCount32
+  i32.add
+  local.set $4
+  local.get $0
+  local.get $2
+  local.get $4
+  call $~lib/util/number/utoa32_core
   local.get $4
  )
- (func $~lib/util/string/joinIntegerArray<i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $2
-  call $~lib/rt/pure/__retain
-  local.set $2
-  local.get $1
-  i32.const 1
-  i32.sub
-  local.set $3
-  local.get $3
-  i32.const 0
-  i32.lt_s
-  if
-   i32.const 1920
-   local.set $4
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $4
-   return
-  end
-  local.get $3
-  i32.eqz
-  if
-   local.get $0
-   i32.load
-   call $~lib/util/number/itoa<i32>
-   local.tee $4
-   local.set $5
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $5
-   return
-  end
-  local.get $2
-  call $~lib/string/String#get:length
-  local.set $6
-  i32.const 11
-  local.get $6
-  i32.add
-  local.get $3
-  i32.mul
-  i32.const 11
-  i32.add
-  local.set $7
-  local.get $7
-  i32.const 1
-  i32.shl
-  i32.const 1
-  call $~lib/rt/tlsf/__alloc
-  call $~lib/rt/pure/__retain
-  local.set $8
-  i32.const 0
-  local.set $9
-  i32.const 0
-  local.set $4
-  loop $for-loop|0
-   local.get $4
-   local.get $3
-   i32.lt_s
-   local.set $5
-   local.get $5
-   if
-    local.get $0
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load
-    local.set $10
-    local.get $9
-    local.get $8
-    local.get $9
-    local.get $10
-    call $~lib/util/number/itoa_stream<i32>
-    i32.add
-    local.set $9
-    local.get $6
-    if
-     local.get $8
-     local.get $9
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $2
-     local.get $6
-     i32.const 1
-     i32.shl
-     call $~lib/memory/memory.copy
-     local.get $9
-     local.get $6
-     i32.add
-     local.set $9
-    end
-    local.get $4
-    i32.const 1
-    i32.add
-    local.set $4
-    br $for-loop|0
-   end
-  end
-  local.get $0
-  local.get $3
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load
-  local.set $10
-  local.get $9
-  local.get $8
-  local.get $9
-  local.get $10
-  call $~lib/util/number/itoa_stream<i32>
-  i32.add
-  local.set $9
-  local.get $7
-  local.get $9
-  i32.gt_s
-  if
-   local.get $8
-   i32.const 0
-   local.get $9
-   call $~lib/string/String#substring
-   local.set $4
-   local.get $2
-   call $~lib/rt/pure/__release
-   local.get $8
-   call $~lib/rt/pure/__release
-   local.get $4
-   return
-  end
-  local.get $8
-  local.set $4
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $4
- )
- (func $~lib/typedarray/Int32Array#join (param $0 i32) (param $1 i32) (result i32)
-  (local $2 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $0
-  i32.load offset=4
-  local.get $0
-  call $~lib/typedarray/Int32Array#get:length
-  local.get $1
-  call $~lib/util/string/joinIntegerArray<i32>
-  local.set $2
-  local.get $1
-  call $~lib/rt/pure/__release
-  local.get $2
- )
- (func $~lib/typedarray/Int32Array#toString (param $0 i32) (result i32)
-  local.get $0
-  i32.const 2368
-  call $~lib/typedarray/Int32Array#join
- )
- (func $std/typedarray/testArrayJoinAndToString<~lib/typedarray/Int32Array,i32>
-  (local $0 i32)
-  (local $1 i32)
-  (local $2 i32)
-  (local $3 i32)
-  i32.const 0
-  i32.const 5
-  call $~lib/typedarray/Int32Array#constructor
-  local.tee $0
-  call $~lib/rt/pure/__retain
-  local.set $1
-  local.get $1
-  i32.const 0
-  i32.const 1
-  call $~lib/typedarray/Int32Array#__set
-  local.get $1
-  i32.const 1
-  i32.const 2
-  call $~lib/typedarray/Int32Array#__set
-  local.get $1
-  i32.const 2
-  i32.const 3
-  call $~lib/typedarray/Int32Array#__set
-  local.get $1
-  i32.const 3
-  i32.const 4
-  call $~lib/typedarray/Int32Array#__set
-  local.get $1
-  i32.const 4
-  i32.const 5
-  call $~lib/typedarray/Int32Array#__set
-  i32.const 0
-  drop
-  local.get $1
-  i32.const 2368
-  call $~lib/typedarray/Int32Array#join
-  local.tee $2
-  i32.const 2400
-  call $~lib/string/String.__eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 304
-   i32.const 629
-   i32.const 5
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  call $~lib/typedarray/Int32Array#toString
-  local.tee $3
-  i32.const 2400
-  call $~lib/string/String.__eq
-  i32.eqz
-  if
-   i32.const 0
-   i32.const 304
-   i32.const 630
-   i32.const 5
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $2
-  call $~lib/rt/pure/__release
-  local.get $3
-  call $~lib/rt/pure/__release
-  local.get $0
-  call $~lib/rt/pure/__release
-  local.get $1
-  call $~lib/rt/pure/__release
- )
- (func $~lib/util/number/itoa<u32> (param $0 i32) (result i32)
-  i32.const 1
-  i32.eqz
-  drop
-  i32.const 0
-  drop
-  i32.const 4
-  i32.const 4
-  i32.le_u
-  drop
-  local.get $0
-  call $~lib/util/number/utoa32
-  return
- )
- (func $~lib/util/number/itoa_stream<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  local.get $0
-  local.get $1
-  i32.const 1
-  i32.shl
-  i32.add
-  local.set $0
-  i32.const 0
-  local.set $3
-  i32.const 0
-  drop
-  i32.const 0
-  i32.const 1
-  i32.le_s
-  drop
-  i32.const 0
-  drop
-  local.get $2
-  i32.const 10
-  i32.lt_u
-  if
-   local.get $0
-   local.get $2
-   i32.const 48
-   i32.or
-   i32.store16
-   i32.const 1
-   return
-  end
-  local.get $3
-  local.set $4
-  i32.const 4
-  i32.const 4
-  i32.le_u
-  drop
-  local.get $4
-  local.get $2
-  call $~lib/util/number/decimalCount32
-  i32.add
-  local.set $4
-  local.get $0
-  local.set $7
-  local.get $2
-  local.set $6
-  local.get $4
-  local.set $5
-  i32.const 0
-  i32.const 1
-  i32.ge_s
-  drop
-  local.get $7
-  local.get $6
-  local.get $5
-  call $~lib/util/number/utoa32_lut
-  local.get $4
- )
- (func $~lib/util/string/joinIntegerArray<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/util/string/joinIntegerArray<u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -34695,15 +34343,21 @@
   local.get $2
   call $~lib/util/number/utoa32_lut
  )
+ (func $~lib/util/number/utoa64_core (param $0 i32) (param $1 i64) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa64_lut
+ )
  (func $~lib/util/number/itoa64 (param $0 i64) (result i32)
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i64)
   local.get $0
   i64.const 0
   i64.ne
@@ -34744,19 +34398,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $2
    local.get $2
-   local.set $7
    local.get $3
-   local.set $6
    local.get $4
-   local.set $5
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $7
-   local.get $6
-   local.get $5
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
@@ -34770,19 +34414,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $2
    local.get $2
-   local.set $6
    local.get $0
-   local.set $8
    local.get $4
-   local.set $5
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $6
-   local.get $8
-   local.get $5
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
   if
@@ -34811,10 +34445,6 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
   local.get $0
   local.get $1
   i32.const 1
@@ -34887,19 +34517,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $8
    local.get $5
-   local.set $7
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $4
    local.get $2
@@ -34907,19 +34527,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $7
    local.get $2
-   local.set $9
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $7
-   local.get $9
-   local.get $6
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $4
  )
@@ -35162,10 +34772,6 @@
   (local $1 i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i64)
   local.get $0
   i64.const 0
   i64.ne
@@ -35192,19 +34798,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $1
    local.get $1
-   local.set $6
    local.get $2
-   local.set $5
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $6
-   local.get $5
-   local.get $4
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $0
    call $~lib/util/number/decimalCount64High
@@ -35216,19 +34812,9 @@
    call $~lib/rt/tlsf/__alloc
    local.set $1
    local.get $1
-   local.set $5
    local.get $0
-   local.set $7
    local.get $3
-   local.set $4
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $5
-   local.get $7
-   local.get $4
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $1
   call $~lib/rt/pure/__retain
@@ -35251,10 +34837,6 @@
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i64)
   local.get $0
   local.get $1
   i32.const 1
@@ -35303,19 +34885,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $8
    local.get $5
-   local.set $7
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $8
-   local.get $7
-   local.get $6
-   call $~lib/util/number/utoa32_lut
+   call $~lib/util/number/utoa32_core
   else
    local.get $4
    local.get $2
@@ -35323,19 +34895,9 @@
    i32.add
    local.set $4
    local.get $0
-   local.set $7
    local.get $2
-   local.set $9
    local.get $4
-   local.set $6
-   i32.const 0
-   i32.const 1
-   i32.ge_s
-   drop
-   local.get $7
-   local.get $9
-   local.get $6
-   call $~lib/util/number/utoa64_lut
+   call $~lib/util/number/utoa64_core
   end
   local.get $4
  )
@@ -35574,6 +35136,248 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
+  local.get $4
+  i32.sub
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $1
+  local.get $5
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
+  local.get $1
+  f64.ne
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 2576
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 3272
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $3
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
+    i64.sub
+    local.get $4
+    i64.ge_u
+   else
+    i32.const 0
+   end
+   if (result i32)
+    local.get $3
+    local.get $4
+    i64.add
+    local.get $5
+    i64.lt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
+     local.get $4
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
+    end
+   else
+    i32.const 0
+   end
+   local.set $8
+   local.get $8
+   if
+    local.get $7
+    i32.const 1
+    i32.sub
+    local.set $7
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $6
+  local.get $7
+  i32.store16
+ )
  (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i64)
@@ -35589,14 +35393,6 @@
   (local $18 i32)
   (local $19 i64)
   (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
   i32.const 0
   local.get $4
   i32.sub
@@ -35836,13 +35632,9 @@
      i32.add
      global.set $~lib/util/number/_K
      local.get $0
-     local.set $24
      local.get $15
-     local.set $18
      local.get $5
-     local.set $23
      local.get $19
-     local.set $22
      i32.const 3448
      local.get $14
      i32.const 2
@@ -35852,79 +35644,15 @@
      local.get $7
      i64.extend_i32_s
      i64.shl
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  loop $while-continue|2
    i32.const 1
    local.set $16
    local.get $16
@@ -35941,8 +35669,8 @@
     local.get $7
     i64.extend_i32_s
     i64.shr_u
-    local.set $23
-    local.get $23
+    local.set $20
+    local.get $20
     local.get $15
     i64.extend_i32_s
     i64.or
@@ -35951,16 +35679,16 @@
     if
      local.get $0
      local.get $15
-     local.tee $26
+     local.tee $18
      i32.const 1
      i32.add
      local.set $15
-     local.get $26
+     local.get $18
      i32.const 1
      i32.shl
      i32.add
      i32.const 48
-     local.get $23
+     local.get $20
      i32.wrap_i64
      i32.const 65535
      i32.and
@@ -35995,98 +35723,161 @@
      i64.mul
      local.set $10
      local.get $0
-     local.set $18
      local.get $15
-     local.set $27
      local.get $5
-     local.set $28
      local.get $13
-     local.set $22
      local.get $8
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
-    br $while-continue|4
+    br $while-continue|2
    end
   end
   unreachable
  )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $3
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $3
+  i64.const 4503599627370495
+  i64.and
+  local.set $5
+  local.get $4
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
+  i32.const 1
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
+  i32.add
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
+  i64.clz
+  i32.wrap_i64
+  local.set $7
+  local.get $6
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $6
+  local.get $4
+  local.get $7
+  i32.sub
+  local.set $4
+  global.get $~lib/util/number/_frc_pow
+  local.set $8
+  global.get $~lib/util/number/_exp_pow
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $11
+  global.get $~lib/util/number/_frc_plus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.set $12
+  global.get $~lib/util/number/_exp
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $13
+  global.get $~lib/util/number/_frc_minus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  local.set $14
+  local.get $12
+  local.get $14
+  i64.sub
+  local.set $15
+  local.get $1
+  local.get $10
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.set $2
+  local.get $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
+ )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $2
   i32.eqz
   if
@@ -36269,48 +36060,10 @@
       local.get $0
       i32.const 4
       i32.add
-      local.set $5
       local.get $3
       i32.const 1
       i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $7
+      call $~lib/util/number/genExponent
       local.set $1
       local.get $1
       i32.const 2
@@ -36320,14 +36073,14 @@
       local.get $1
       i32.const 1
       i32.shl
-      local.set $7
+      local.set $4
       local.get $0
       i32.const 4
       i32.add
       local.get $0
       i32.const 2
       i32.add
-      local.get $7
+      local.get $4
       i32.const 2
       i32.sub
       call $~lib/memory/memory.copy
@@ -36335,58 +36088,20 @@
       i32.const 46
       i32.store16 offset=2
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 101
       i32.store16 offset=2
       local.get $1
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 4
       i32.add
-      local.set $9
       local.get $3
       i32.const 1
       i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
+      call $~lib/util/number/genExponent
       i32.add
       local.set $1
       local.get $1
@@ -36405,31 +36120,6 @@
  (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
   local.get $1
   f64.const 0
   f64.lt
@@ -36444,387 +36134,22 @@
    i32.store16
   end
   local.get $1
-  local.set $5
   local.get $0
-  local.set $4
   local.get $2
+  call $~lib/util/number/grisu2
   local.set $3
-  local.get $5
-  i64.reinterpret_f64
-  local.set $6
-  local.get $6
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.set $7
-  local.get $6
-  i64.const 4503599627370495
-  i64.and
-  local.set $8
-  local.get $7
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 2576
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 3272
-  local.get $14
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $9
-  local.get $7
-  local.get $14
-  i32.sub
-  local.set $7
-  global.get $~lib/util/number/_frc_pow
-  local.set $12
-  global.get $~lib/util/number/_exp_pow
-  local.set $15
-  local.get $9
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
-  global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
-  i64.const 1
-  i64.sub
-  local.set $25
-  global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
-  local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $26
-  global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
-  i64.const 1
-  i64.add
-  local.set $27
-  local.get $25
-  local.get $27
-  i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
-  local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
-  local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
@@ -37470,95 +36795,85 @@
   i32.sub
   i32.load offset=12
  )
- (func $~lib/typedarray/Uint8Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 0
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 0
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 0
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -37567,29 +36882,39 @@
   i32.const 12
   i32.const 4
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Uint8Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Uint8Array,u8>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Uint8Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -37697,95 +37022,85 @@
   local.get $7
   call $~lib/rt/pure/__retain
  )
- (func $~lib/typedarray/Int8Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Int8Array,i8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 0
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 0
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 0
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -37794,29 +37109,39 @@
   i32.const 12
   i32.const 3
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Int8Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Int8Array,i8>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Int8Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -38073,95 +37398,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Uint8ClampedArray,u8> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 0
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 0
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 0
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -38170,29 +37485,39 @@
   i32.const 12
   i32.const 5
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Uint8ClampedArray.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Uint8ClampedArray,u8>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Uint8ClampedArray.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -38335,95 +37660,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 1
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 1
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 1
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -38432,29 +37747,39 @@
   i32.const 12
   i32.const 6
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Int16Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Int16Array,i16>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Int16Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -38601,95 +37926,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Uint16Array,u16> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 1
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 1
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 1
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -38698,29 +38013,39 @@
   i32.const 12
   i32.const 7
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Uint16Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Uint16Array,u16>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Uint16Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -38867,95 +38192,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 3
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 3
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 2
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -38964,29 +38279,39 @@
   i32.const 12
   i32.const 8
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Int32Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Int32Array,i32>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Int32Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -39133,95 +38458,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 3
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 3
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 2
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -39230,29 +38545,39 @@
   i32.const 12
   i32.const 9
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Uint32Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Uint32Array,u32>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Uint32Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -39401,95 +38726,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 7
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 7
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 3
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -39498,29 +38813,39 @@
   i32.const 12
   i32.const 10
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Int64Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Int64Array,i64>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Int64Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -39672,95 +38997,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Uint64Array,u64> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 7
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 7
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 3
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -39769,29 +39084,39 @@
   i32.const 12
   i32.const 11
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Uint64Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Uint64Array,u64>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Uint64Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -39945,95 +39270,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 3
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 3
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 2
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -40042,29 +39357,39 @@
   i32.const 12
   i32.const 12
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Float32Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Float32Array,f32>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Float32Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -40220,95 +39545,85 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+ (func $~lib/typedarray/WRAP<~lib/typedarray/Float64Array,f64> (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $0
   call $~lib/rt/pure/__retain
   local.set $0
   local.get $0
-  call $~lib/rt/pure/__retain
-  local.set $5
-  local.get $1
-  local.set $4
-  local.get $2
-  local.set $3
-  local.get $5
   call $~lib/arraybuffer/ArrayBuffer#get:byteLength
-  local.set $7
+  local.set $4
+  local.get $1
   local.get $4
-  local.get $7
   i32.gt_u
-  local.get $4
+  local.get $1
   i32.const 7
   i32.and
   i32.or
   if
-   local.get $5
+   local.get $0
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1741
+   i32.const 1705
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $3
+   local.get $2
    i32.const -1
    i32.eq
    if
-    local.get $7
+    local.get $4
     i32.const 7
     i32.and
     if
-     local.get $5
+     local.get $0
      call $~lib/rt/pure/__release
      i32.const 32
      i32.const 432
-     i32.const 1746
+     i32.const 1710
      i32.const 9
      call $~lib/builtins/abort
      unreachable
     end
-    local.get $7
     local.get $4
+    local.get $1
     i32.sub
-    local.set $6
+    local.set $3
    else
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1750
+    i32.const 1714
     i32.const 7
     call $~lib/builtins/abort
     unreachable
    end
   else
-   local.get $3
+   local.get $2
    i32.const 3
    i32.shl
-   local.set $6
-   local.get $4
-   local.get $6
+   local.set $3
+   local.get $1
+   local.get $3
    i32.add
-   local.get $7
+   local.get $4
    i32.gt_s
    if
-    local.get $5
+    local.get $0
     call $~lib/rt/pure/__release
     i32.const 32
     i32.const 432
-    i32.const 1755
+    i32.const 1719
     i32.const 7
     call $~lib/builtins/abort
     unreachable
@@ -40317,29 +39632,39 @@
   i32.const 12
   i32.const 13
   call $~lib/rt/tlsf/__alloc
-  local.set $8
-  local.get $8
+  local.set $5
   local.get $5
+  local.get $0
   call $~lib/rt/pure/__retain
   i32.store
-  local.get $8
-  local.get $6
+  local.get $5
+  local.get $3
   i32.store offset=8
-  local.get $8
   local.get $5
-  local.get $4
+  local.get $0
+  local.get $1
   i32.add
   i32.store offset=4
-  local.get $8
-  call $~lib/rt/pure/__retain
-  local.set $9
   local.get $5
+  call $~lib/rt/pure/__retain
+  local.set $6
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $9
-  local.set $8
+  local.get $6
+ )
+ (func $~lib/typedarray/Float64Array.wrap (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  local.get $0
+  call $~lib/rt/pure/__retain
+  local.set $0
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/WRAP<~lib/typedarray/Float64Array,f64>
+  local.set $3
   local.get $0
   call $~lib/rt/pure/__release
-  local.get $8
+  local.get $3
  )
  (func $~lib/typedarray/Float64Array.wrap@varargs (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   block $2of2
@@ -40497,58 +39822,50 @@
   local.get $7
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -40575,27 +39892,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -40615,29 +39932,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int8Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -40728,59 +40054,51 @@
   local.get $0
   i32.load offset=12
  )
- (func $~lib/typedarray/Int8Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -40807,27 +40125,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -40839,96 +40157,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f32_s
     else
      i32.const 0
     end
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int8Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -40955,27 +40274,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -40995,29 +40314,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     i64.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -41025,59 +40353,51 @@
   local.get $0
   i32.load offset=12
  )
- (func $~lib/typedarray/Int8Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -41104,27 +40424,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -41136,91 +40456,92 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f64_s
     else
      i32.const 0
     end
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Int8Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<f64>,f64>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -41247,76 +40568,77 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -41343,27 +40665,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -41383,79 +40705,80 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int8Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Int8Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/typedarray/Int16Array,i16>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -41482,21 +40805,30 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int8Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -41667,58 +40999,50 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -41745,27 +41069,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -41785,29 +41109,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -41907,59 +41240,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -41986,27 +41311,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -42018,96 +41343,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f32_u
     else
      i32.const 0
     end
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -42134,27 +41460,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -42174,85 +41500,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     i64.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -42279,27 +41606,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -42311,91 +41638,92 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f64_u
     else
      i32.const 0
     end
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<f64>,f64>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -42422,76 +41750,77 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -42518,27 +41847,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -42558,79 +41887,80 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Uint8Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/typedarray/Int16Array,i16>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -42657,21 +41987,30 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -42842,59 +42181,51 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -42921,39 +42252,39 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 0
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.set $11
+    local.set $8
     i32.const 1
     i32.eqz
     drop
@@ -42961,36 +42292,45 @@
     i32.const 4
     i32.le_u
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
+    local.get $8
     i32.const 31
     i32.shr_s
     i32.const -1
     i32.xor
     i32.const 255
-    local.get $11
+    local.get $8
     i32.sub
     i32.const 31
     i32.shr_s
-    local.get $11
+    local.get $8
     i32.or
     i32.and
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -43077,59 +42417,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -43156,53 +42488,53 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 1
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
      f32.const 0
      f32.const 255
-     local.get $11
+     local.get $8
      f32.min
      f32.max
      i32.trunc_f32_u
@@ -43210,73 +42542,74 @@
      i32.const 0
     end
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 i64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -43303,39 +42636,39 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 0
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
-    local.set $11
+    local.set $8
     i32.const 1
     i32.eqz
     drop
@@ -43343,12 +42676,12 @@
     i32.const 4
     i32.le_u
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
+    local.get $8
     i32.wrap_i64
     i32.const 31
     i32.shr_s
@@ -43356,83 +42689,84 @@
     i32.xor
     i64.extend_i32_s
     i32.const 255
-    local.get $11
+    local.get $8
     i32.wrap_i64
     i32.sub
     i32.const 31
     i32.shr_s
     i64.extend_i32_s
-    local.get $11
+    local.get $8
     i64.or
     i64.and
     i64.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -43459,53 +42793,53 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 1
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i32)
      f64.const 0
      f64.const 255
-     local.get $11
+     local.get $8
      f64.min
      f64.max
      i32.trunc_f64_u
@@ -43513,67 +42847,68 @@
      i32.const 0
     end
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<f64>,f64>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -43600,77 +42935,78 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -43697,39 +43033,39 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 0
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
-    local.set $11
+    local.set $8
     i32.const 1
     i32.eqz
     drop
@@ -43737,92 +43073,93 @@
     i32.const 4
     i32.le_u
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
+    local.get $8
     i32.const 31
     i32.shr_s
     i32.const -1
     i32.xor
     i32.const 255
-    local.get $11
+    local.get $8
     i32.sub
     i32.const 31
     i32.shr_s
-    local.get $11
+    local.get $8
     i32.or
     i32.and
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -43849,39 +43186,39 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 0
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
-    local.set $11
+    local.set $8
     i32.const 1
     i32.eqz
     drop
@@ -43889,36 +43226,45 @@
     i32.const 4
     i32.le_u
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
+    local.get $8
     i32.const 31
     i32.shr_s
     i32.const -1
     i32.xor
     i32.const 255
-    local.get $11
+    local.get $8
     i32.sub
     i32.const 31
     i32.shr_s
-    local.get $11
+    local.get $8
     i32.or
     i32.and
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -44089,58 +43435,50 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -44167,27 +43505,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -44207,29 +43545,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int16Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -44329,59 +43676,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -44408,27 +43747,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -44440,96 +43779,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f32_s
     else
      i32.const 0
     end
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int16Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -44556,27 +43896,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -44596,85 +43936,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     i64.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -44701,27 +44042,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -44733,96 +44074,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f64_s
     else
      i32.const 0
     end
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int16Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<f64>,f64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -44849,27 +44191,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -44889,79 +44231,80 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Uint8Array,u8>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -44988,76 +44331,77 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int16Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int16Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -45084,27 +44428,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -45124,29 +44468,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int16Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -45317,58 +44670,50 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -45395,27 +44740,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -45435,29 +44780,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -45557,59 +44911,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -45636,27 +44982,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -45668,96 +45014,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f32_u
     else
      i32.const 0
     end
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -45784,27 +45131,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -45824,85 +45171,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     i64.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -45929,27 +45277,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -45961,96 +45309,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f64_u
     else
      i32.const 0
     end
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<f64>,f64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -46077,27 +45426,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -46117,79 +45466,80 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/typedarray/Uint8Array,u8>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -46216,76 +45566,77 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint16Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint16Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -46312,27 +45663,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -46352,29 +45703,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 1
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
     i32.store16
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint16Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -46545,53 +45905,45 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -46618,21 +45970,30 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int32Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -46719,59 +46080,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -46798,27 +46151,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -46830,96 +46183,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f32_s
     else
      i32.const 0
     end
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int32Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -46946,27 +46300,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -46986,85 +46340,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     i64.store32
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -47091,27 +46446,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -47123,96 +46478,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f64_s
     else
      i32.const 0
     end
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int32Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<f64>,f64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -47239,27 +46595,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -47279,84 +46635,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -47383,27 +46740,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -47423,84 +46780,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int32Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int32Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -47527,27 +46885,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -47567,29 +46925,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int32Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -47760,53 +47127,45 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -47833,21 +47192,30 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -47947,59 +47315,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -48026,27 +47386,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -48058,96 +47418,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f32_u
     else
      i32.const 0
     end
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -48174,27 +47535,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -48214,85 +47575,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     i64.store32
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -48319,27 +47681,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -48351,96 +47713,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i32)
-     local.get $11
+     local.get $8
      i32.trunc_f64_u
     else
      i32.const 0
     end
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<f64>,f64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -48467,27 +47830,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -48507,84 +47870,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -48611,27 +47975,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -48651,84 +48015,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint32Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -48755,27 +48120,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -48795,29 +48160,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
     i32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint32Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -48988,58 +48362,50 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -49066,27 +48432,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -49106,29 +48472,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i64.load32_s
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int64Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -49228,59 +48603,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -49307,27 +48674,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -49339,91 +48706,92 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i64)
-     local.get $11
+     local.get $8
      i64.trunc_f32_s
     else
      i64.const 0
     end
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Int64Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<f32>,f32>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -49450,77 +48818,78 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -49547,27 +48916,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -49579,96 +48948,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i64)
-     local.get $11
+     local.get $8
      i64.trunc_f64_s
     else
      i64.const 0
     end
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int64Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<f64>,f64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -49695,27 +49065,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -49735,84 +49105,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i64.load8_u
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -49839,27 +49210,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -49879,84 +49250,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i64.load16_s
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int64Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Int64Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Int64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -49983,27 +49355,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -50023,29 +49395,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i64.load8_s
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Int64Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -50216,58 +49597,50 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -50294,27 +49667,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -50334,29 +49707,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i64.load32_s
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -50456,59 +49838,51 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -50535,27 +49909,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -50567,91 +49941,92 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i64)
-     local.get $11
+     local.get $8
      i64.trunc_f32_u
     else
      i64.const 0
     end
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
-  call $~lib/rt/pure/__release
-  local.get $5
+  local.get $0
   call $~lib/rt/pure/__release
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
+ (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $1
   call $~lib/rt/pure/__retain
   local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<f32>,f32>
+  local.get $1
+  call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -50678,77 +50053,78 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<f64>,f64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f64)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f64)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -50775,27 +50151,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f64>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -50807,96 +50183,97 @@
      i32.const 0
     end
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     f64.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f64.sub
     f64.const 0
     f64.eq
     if (result i64)
-     local.get $11
+     local.get $8
      i64.trunc_f64_u
     else
      i64.const 0
     end
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<f64>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<f64>,f64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -50923,27 +50300,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -50963,84 +50340,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i64.load8_u
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -51067,27 +50445,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -51107,84 +50485,85 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i64.load16_s
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint64Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -51211,27 +50590,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -51251,29 +50630,38 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i64.load8_s
     i64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint64Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -51444,58 +50832,50 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -51522,27 +50902,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -51562,30 +50942,39 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
     f32.convert_i32_s
     f32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float32Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -51681,53 +51070,45 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
-  (local $3 i32)
-  (local $4 i32)
-  (local $5 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+ (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -51754,76 +51135,77 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.get $4
+  local.get $1
   i32.load offset=4
-  local.get $4
+  local.get $1
   i32.load offset=8
   call $~lib/memory/memory.copy
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float32Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -51850,27 +51232,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -51890,85 +51272,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     f32.convert_i64_s
     f32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -51995,27 +51378,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -52035,85 +51418,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
     f32.convert_i32_u
     f32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -52140,27 +51524,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -52180,85 +51564,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
     f32.convert_i32_s
     f32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float32Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float32Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float32Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -52285,27 +51670,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 2
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -52325,30 +51710,39 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 2
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
     f32.convert_i32_s
     f32.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float32Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -52504,58 +51898,50 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array<i32>,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -52582,27 +51968,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -52622,30 +52008,39 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
     f64.convert_i32_s
     f64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float64Array#set<~lib/array/Array<i32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array<i32>,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -52739,58 +52134,50 @@
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array<f32>,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -52817,27 +52204,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<f32>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -52857,85 +52244,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
     f64.promote_f32
     f64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float64Array#set<~lib/array/Array<f32>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array<f32>,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/typedarray/Int64Array,i64> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -52962,27 +52350,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int64Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -53002,85 +52390,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 3
     i32.shl
     i32.add
     i64.load
     f64.convert_i64_s
     f64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int64Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/typedarray/Int64Array,i64>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/typedarray/Uint8Array,u8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -53107,27 +52496,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint8Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -53147,85 +52536,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_u
     f64.convert_i32_u
     f64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Uint8Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/typedarray/Uint8Array,u8>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/typedarray/Int16Array,i16> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -53252,27 +52642,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int16Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -53292,85 +52682,86 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 1
     i32.shl
     i32.add
     i32.load16_s
     f64.convert_i32_s
     f64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float64Array#set<~lib/typedarray/Int16Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/typedarray/Int16Array,i16>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Float64Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array<i8>,i8> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Float64Array#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -53397,27 +52788,27 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 3
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/array/Array<i8>#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 0
     drop
@@ -53437,30 +52828,39 @@
      i32.const 0
     end
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 3
     i32.shl
     i32.add
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 0
     i32.shl
     i32.add
     i32.load8_s
     f64.convert_i32_s
     f64.store
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Float64Array#set<~lib/array/Array<i8>> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array<i8>,i8>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -53616,59 +53016,51 @@
   local.get $8
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Float32Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Float32Array,f32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 f32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
+  (local $8 f32)
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Float32Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -53695,53 +53087,53 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Float32Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 1
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     f32.load
-    local.set $11
+    local.set $8
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
-    local.get $11
+    local.get $8
+    local.get $8
     f32.sub
     f32.const 0
     f32.eq
     if (result i32)
      f32.const 0
      f32.const 255
-     local.get $11
+     local.get $8
      f32.min
      f32.max
      i32.trunc_f32_u
@@ -53749,73 +53141,74 @@
      i32.const 0
     end
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Float32Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Float32Array,f32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int32Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int32Array,i32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Int32Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -53842,39 +53235,39 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Int32Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 0
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.set $11
+    local.set $8
     i32.const 1
     i32.eqz
     drop
@@ -53882,40 +53275,49 @@
     i32.const 4
     i32.le_u
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
-    local.get $11
+    local.get $8
     i32.const 31
     i32.shr_s
     i32.const -1
     i32.xor
     i32.const 255
-    local.get $11
+    local.get $8
     i32.sub
     i32.const 31
     i32.shr_s
-    local.get $11
+    local.get $8
     i32.or
     i32.and
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Int32Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Int32Array,i32>
   local.get $1
   call $~lib/rt/pure/__release
  )
- (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint32Array> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Uint32Array,u32> (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
@@ -53924,52 +53326,44 @@
   (local $8 i32)
   (local $9 i32)
   (local $10 i32)
-  (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
-  local.get $1
-  call $~lib/rt/pure/__retain
-  local.set $1
   local.get $0
   call $~lib/rt/pure/__retain
-  local.set $5
+  local.set $0
   local.get $1
   call $~lib/rt/pure/__retain
-  local.set $4
-  local.get $2
-  local.set $3
+  local.set $1
   i32.const 0
   drop
-  local.get $3
+  local.get $2
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1774
+   i32.const 1736
    i32.const 19
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $1
   call $~lib/typedarray/Uint32Array#get:length
-  local.get $3
+  local.get $2
   i32.add
-  local.get $5
+  local.get $0
   call $~lib/typedarray/Uint8ClampedArray#get:length
   i32.gt_s
   if
-   local.get $4
+   local.get $0
    call $~lib/rt/pure/__release
-   local.get $5
+   local.get $1
    call $~lib/rt/pure/__release
    i32.const 368
    i32.const 432
-   i32.const 1775
+   i32.const 1737
    i32.const 47
    call $~lib/builtins/abort
    unreachable
@@ -53996,67 +53390,76 @@
    i32.const 0
   end
   drop
-  local.get $5
+  local.get $0
   i32.load offset=4
-  local.get $3
+  local.get $2
   i32.const 0
   i32.shl
   i32.add
-  local.set $6
-  local.get $4
+  local.set $3
+  local.get $1
   i32.load offset=4
-  local.set $7
-  local.get $4
+  local.set $4
+  local.get $1
   call $~lib/typedarray/Uint32Array#get:length
-  local.set $8
+  local.set $5
   i32.const 0
-  local.set $9
+  local.set $6
   loop $for-loop|0
-   local.get $9
-   local.get $8
+   local.get $6
+   local.get $5
    i32.lt_s
-   local.set $10
-   local.get $10
+   local.set $7
+   local.get $7
    if
     i32.const 1
     drop
     i32.const 0
     drop
-    local.get $7
-    local.get $9
+    local.get $4
+    local.get $6
     i32.const 2
     i32.shl
     i32.add
     i32.load
-    local.set $11
+    local.set $8
     i32.const 0
     i32.eqz
     drop
+    local.get $3
     local.get $6
-    local.get $9
     i32.const 0
     i32.shl
     i32.add
     i32.const 255
-    local.tee $12
-    local.get $11
-    local.tee $13
-    local.get $12
-    local.get $13
+    local.tee $9
+    local.get $8
+    local.tee $10
+    local.get $9
+    local.get $10
     i32.lt_u
     select
     i32.store8
-    local.get $9
+    local.get $6
     i32.const 1
     i32.add
-    local.set $9
+    local.set $6
     br $for-loop|0
    end
   end
-  local.get $4
+  local.get $0
   call $~lib/rt/pure/__release
-  local.get $5
+  local.get $1
   call $~lib/rt/pure/__release
+ )
+ (func $~lib/typedarray/Uint8ClampedArray#set<~lib/typedarray/Uint32Array> (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $1
+  call $~lib/rt/pure/__retain
+  local.set $1
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/typedarray/Uint32Array,u32>
   local.get $1
   call $~lib/rt/pure/__release
  )
@@ -56070,8 +55473,6 @@
   f64.const nan:0x8000000000000
   i32.const 0
   call $~lib/typedarray/Float64Array#includes
-  i32.const 0
-  i32.ne
   i32.const 1
   i32.eq
   i32.eqz
@@ -56110,8 +55511,6 @@
   f32.const nan:0x400000
   i32.const 0
   call $~lib/typedarray/Float32Array#includes
-  i32.const 0
-  i32.ne
   i32.const 1
   i32.eq
   i32.eqz
diff --git a/tests/compiler/switch.optimized.wat b/tests/compiler/switch.optimized.wat
index 03c10321f8..8289af051f 100644
--- a/tests/compiler/switch.optimized.wat
+++ b/tests/compiler/switch.optimized.wat
@@ -1,6 +1,6 @@
 (module
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (memory $0 1)
@@ -60,26 +60,6 @@
   end
   i32.const 0
  )
- (func $switch/doSwitchBreakCase (param $0 i32) (result i32)
-  local.get $0
-  i32.const 1
-  i32.ne
-  if
-   i32.const 2
-   return
-  end
-  i32.const 1
- )
- (func $switch/doSwitchBreakDefault (param $0 i32) (result i32)
-  local.get $0
-  i32.const 1
-  i32.eq
-  if
-   i32.const 1
-   return
-  end
-  i32.const 2
- )
  (func $start:switch
   i32.const 0
   call $switch/doSwitch
@@ -249,150 +229,6 @@
    call $~lib/builtins/abort
    unreachable
   end
-  i32.const 0
-  call $switch/doSwitchBreakCase
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 51
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchBreakCase
-  i32.const 1
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 52
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchBreakCase
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 53
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  call $switch/doSwitchBreakDefault
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 62
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchBreakDefault
-  i32.const 1
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 63
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchBreakDefault
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 64
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  call $switch/doSwitchBreakCase
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 73
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchBreakCase
-  i32.const 1
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 74
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchBreakCase
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 75
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 0
-  call $switch/doSwitchBreakDefault
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 84
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  call $switch/doSwitchBreakDefault
-  i32.const 1
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 85
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 2
-  call $switch/doSwitchBreakDefault
-  i32.const 2
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 86
-   i32.const 1
-   call $~lib/builtins/abort
-   unreachable
-  end
  )
  (func $~start
   call $start:switch
diff --git a/tests/compiler/typeof.optimized.wat b/tests/compiler/typeof.optimized.wat
index ef8bc54d29..83a4226e70 100644
--- a/tests/compiler/typeof.optimized.wat
+++ b/tests/compiler/typeof.optimized.wat
@@ -1,7 +1,6 @@
 (module
  (type $none_=>_none (func))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
@@ -17,14 +16,6 @@
  (global $~started (mut i32) (i32.const 0))
  (export "_start" (func $~start))
  (export "memory" (memory $0))
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/util/string/compareImpl (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -118,10 +109,18 @@
    select
    br_if $folding-inner0
    local.get $0
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    local.tee $2
    local.get $1
-   call $~lib/string/String#get:length
+   i32.const 16
+   i32.sub
+   i32.load offset=12
+   i32.const 1
+   i32.shr_u
    i32.ne
    br_if $folding-inner0
    local.get $0
diff --git a/tests/compiler/wasi/abort.optimized.wat b/tests/compiler/wasi/abort.optimized.wat
index 1f8d5069ad..f98c518dbc 100644
--- a/tests/compiler/wasi/abort.optimized.wat
+++ b/tests/compiler/wasi/abort.optimized.wat
@@ -1,7 +1,7 @@
 (module
  (type $none_=>_none (func))
- (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_=>_none (func (param i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
  (import "wasi_snapshot_preview1" "fd_write" (func $~lib/bindings/wasi_snapshot_preview1/fd_write (param i32 i32 i32 i32) (result i32)))
@@ -12,14 +12,6 @@
  (export "_start" (func $~start))
  (export "memory" (memory $0))
  (export "test" (func $wasi/abort/test))
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/string/String.UTF8.encodeUnsafe (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -241,7 +233,7 @@
   (local $3 i32)
   (local $4 i32)
   i32.const 3
-  local.set $1
+  local.set $2
   i32.const 4
   local.set $0
   i32.const 0
@@ -251,32 +243,36 @@
   i64.const 9071471065260641
   i64.store
   i32.const 1040
-  i32.const 1040
-  call $~lib/string/String#get:length
+  i32.const 1036
+  i32.load
+  i32.const 1
+  i32.shr_u
   i32.const 19
   call $~lib/string/String.UTF8.encodeUnsafe
   i32.const 19
   i32.add
-  local.tee $3
+  local.tee $1
   i32.const 544106784
   i32.store
-  local.get $3
+  local.get $1
   i32.const 4
   i32.add
-  local.tee $3
-  i32.const 1088
+  local.tee $1
   i32.const 1088
-  call $~lib/string/String#get:length
-  local.get $3
+  i32.const 1084
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.get $1
   call $~lib/string/String.UTF8.encodeUnsafe
   i32.add
-  local.tee $3
+  local.tee $1
   i32.const 40
   i32.store8
   i32.const 4
   call $~lib/util/number/decimalCount32
   local.tee $4
-  local.get $3
+  local.get $1
   i32.const 1
   i32.add
   i32.add
@@ -306,37 +302,37 @@
   i32.store8
   i32.const 3
   call $~lib/util/number/decimalCount32
-  local.tee $2
+  local.tee $1
   local.get $0
   i32.const 1
   i32.add
   i32.add
   local.set $3
   loop $do-continue|1
-   local.get $1
+   local.get $2
    i32.const 10
    i32.div_u
    local.get $3
    i32.const 1
    i32.sub
    local.tee $3
-   local.get $1
+   local.get $2
    i32.const 10
    i32.rem_u
    i32.const 48
    i32.add
    i32.store8
-   local.tee $1
+   local.tee $2
    br_if $do-continue|1
   end
-  local.get $2
+  local.get $1
   local.get $3
   i32.add
-  local.tee $1
+  local.tee $2
   i32.const 2601
   i32.store16
   i32.const 4
-  local.get $1
+  local.get $2
   i32.const -10
   i32.add
   i32.store
diff --git a/tests/compiler/wasi/seed.optimized.wat b/tests/compiler/wasi/seed.optimized.wat
index 7551fbf30a..37edc48591 100644
--- a/tests/compiler/wasi/seed.optimized.wat
+++ b/tests/compiler/wasi/seed.optimized.wat
@@ -297,7 +297,7 @@
   (local $4 i32)
   i32.const 5
   local.set $1
-  i32.const 1404
+  i32.const 1381
   local.set $0
   i32.const 0
   i32.const 12
@@ -318,7 +318,7 @@
   local.tee $2
   i32.const 40
   i32.store8
-  i32.const 1404
+  i32.const 1381
   call $~lib/util/number/decimalCount32
   local.tee $4
   local.get $2
diff --git a/tests/compiler/wasi/seed.untouched.wat b/tests/compiler/wasi/seed.untouched.wat
index 7b482d50a1..a36b059110 100644
--- a/tests/compiler/wasi/seed.untouched.wat
+++ b/tests/compiler/wasi/seed.untouched.wat
@@ -612,7 +612,7 @@
   if
    i32.const 0
    i32.const 32
-   i32.const 1404
+   i32.const 1381
    i32.const 5
    call $~lib/wasi/index/abort
    unreachable
diff --git a/tests/compiler/wasi/trace.optimized.wat b/tests/compiler/wasi/trace.optimized.wat
index 13a8be18f1..b68cd111dd 100644
--- a/tests/compiler/wasi/trace.optimized.wat
+++ b/tests/compiler/wasi/trace.optimized.wat
@@ -1,15 +1,19 @@
 (module
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
- (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_f64_f64_f64_f64_f64_=>_none (func (param i32 f64 f64 f64 f64 f64)))
  (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
- (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
+ (type $i32_i64_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i64 i32 i64 i32) (result i32)))
+ (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (import "wasi_snapshot_preview1" "fd_write" (func $~lib/bindings/wasi_snapshot_preview1/fd_write (param i32 i32 i32 i32) (result i32)))
  (import "wasi_snapshot_preview1" "proc_exit" (func $~lib/bindings/wasi_snapshot_preview1/proc_exit (param i32)))
  (memory $0 1)
@@ -193,14 +197,6 @@
   i32.store offset=12
   local.get $3
  )
- (func $~lib/string/String#get:length (param $0 i32) (result i32)
-  local.get $0
-  i32.const 16
-  i32.sub
-  i32.load offset=12
-  i32.const 1
-  i32.shr_u
- )
  (func $~lib/string/String.UTF8.encodeUnsafe (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
@@ -373,6 +369,51 @@
   local.get $2
   i32.sub
  )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.tee $3
+  i64.mul
+  local.get $2
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.tee $2
+  i64.mul
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $0
+  local.get $3
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.tee $1
+  i64.mul
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.get $1
+  local.get $2
+  i64.mul
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  i64.add
+  i64.const 2147483647
+  i64.add
+  i64.const 32
+  i64.shr_u
+  i64.add
+ )
  (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
   local.get $0
   i32.const 10
@@ -415,42 +456,98 @@
   i32.lt_u
   select
  )
- (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.tee $0
+  i32.load16_u
+  local.set $1
+  loop $while-continue|1
+   i32.const 1
+   local.get $5
+   local.get $3
+   i64.sub
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.sub
+   i64.gt_u
+   local.get $3
+   local.get $4
+   i64.add
+   local.get $5
+   i64.lt_u
+   select
+   i32.const 0
+   local.get $2
+   local.get $3
+   i64.sub
+   local.get $4
+   i64.ge_u
+   i32.const 0
+   local.get $3
+   local.get $5
+   i64.lt_u
+   select
+   select
+   if
+    local.get $1
+    i32.const 1
+    i32.sub
+    local.set $1
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $0
+  local.get $1
+  i32.store16
+ )
+ (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i64) (param $3 i32) (param $4 i64) (param $5 i32) (result i32)
+  (local $6 i32)
   (local $7 i32)
-  (local $8 i64)
+  (local $8 i32)
   (local $9 i64)
-  (local $10 i32)
+  (local $10 i64)
   (local $11 i64)
   (local $12 i64)
-  (local $13 i64)
-  local.get $3
+  local.get $2
   local.get $1
   i64.sub
   local.set $9
-  local.get $3
+  local.get $2
   i64.const 1
   i32.const 0
-  local.get $4
+  local.get $3
   i32.sub
-  local.tee $10
+  local.tee $8
   i64.extend_i32_s
   i64.shl
-  local.tee $11
+  local.tee $10
   i64.const 1
   i64.sub
-  local.tee $12
+  local.tee $11
   i64.and
-  local.set $8
-  local.get $3
-  local.get $10
+  local.set $1
+  local.get $2
+  local.get $8
   i64.extend_i32_s
   i64.shr_u
   i32.wrap_i64
-  local.tee $7
+  local.tee $6
   call $~lib/util/number/decimalCount32
-  local.set $4
+  local.set $3
   loop $while-continue|0
-   local.get $4
+   local.get $3
    i32.const 0
    i32.gt_s
    if
@@ -465,527 +562,591 @@
             block $case3|1
              block $case2|1
               block $case1|1
-               local.get $4
-               local.tee $2
+               local.get $3
+               local.tee $7
                i32.const 10
                i32.ne
                if
-                local.get $2
+                local.get $7
                 i32.const 1
                 i32.sub
                 br_table $case9|1 $case8|1 $case7|1 $case6|1 $case5|1 $case4|1 $case3|1 $case2|1 $case1|1 $case10|1
                end
-               local.get $7
+               local.get $6
                i32.const 1000000000
                i32.div_u
-               local.set $2
-               local.get $7
+               local.set $3
+               local.get $6
                i32.const 1000000000
                i32.rem_u
-               local.set $7
+               local.set $6
                br $break|1
               end
-              local.get $7
+              local.get $6
               i32.const 100000000
               i32.div_u
-              local.set $2
-              local.get $7
+              local.set $3
+              local.get $6
               i32.const 100000000
               i32.rem_u
-              local.set $7
+              local.set $6
               br $break|1
              end
-             local.get $7
+             local.get $6
              i32.const 10000000
              i32.div_u
-             local.set $2
-             local.get $7
+             local.set $3
+             local.get $6
              i32.const 10000000
              i32.rem_u
-             local.set $7
+             local.set $6
              br $break|1
             end
-            local.get $7
+            local.get $6
             i32.const 1000000
             i32.div_u
-            local.set $2
-            local.get $7
+            local.set $3
+            local.get $6
             i32.const 1000000
             i32.rem_u
-            local.set $7
+            local.set $6
             br $break|1
            end
-           local.get $7
+           local.get $6
            i32.const 100000
            i32.div_u
-           local.set $2
-           local.get $7
+           local.set $3
+           local.get $6
            i32.const 100000
            i32.rem_u
-           local.set $7
+           local.set $6
            br $break|1
           end
-          local.get $7
+          local.get $6
           i32.const 10000
           i32.div_u
-          local.set $2
-          local.get $7
+          local.set $3
+          local.get $6
           i32.const 10000
           i32.rem_u
-          local.set $7
+          local.set $6
           br $break|1
          end
-         local.get $7
+         local.get $6
          i32.const 1000
          i32.div_u
-         local.set $2
-         local.get $7
+         local.set $3
+         local.get $6
          i32.const 1000
          i32.rem_u
-         local.set $7
+         local.set $6
          br $break|1
         end
-        local.get $7
+        local.get $6
         i32.const 100
         i32.div_u
-        local.set $2
-        local.get $7
+        local.set $3
+        local.get $6
         i32.const 100
         i32.rem_u
-        local.set $7
+        local.set $6
         br $break|1
        end
-       local.get $7
+       local.get $6
        i32.const 10
        i32.div_u
-       local.set $2
-       local.get $7
+       local.set $3
+       local.get $6
        i32.const 10
        i32.rem_u
-       local.set $7
+       local.set $6
        br $break|1
       end
-      local.get $7
-      local.set $2
+      local.get $6
+      local.set $3
       i32.const 0
-      local.set $7
+      local.set $6
       br $break|1
      end
      i32.const 0
-     local.set $2
+     local.set $3
     end
-    local.get $2
-    local.get $6
+    local.get $3
+    local.get $5
     i32.or
     if
      local.get $0
-     local.get $6
+     local.get $5
      i32.const 1
      i32.shl
      i32.add
-     local.get $2
+     local.get $3
      i32.const 65535
      i32.and
      i32.const 48
      i32.add
      i32.store16
-     local.get $6
+     local.get $5
      i32.const 1
      i32.add
-     local.set $6
+     local.set $5
     end
-    local.get $4
+    local.get $7
     i32.const 1
     i32.sub
-    local.set $4
-    local.get $8
-    local.get $7
+    local.set $3
+    local.get $1
+    local.get $6
     i64.extend_i32_u
-    local.get $10
+    local.get $8
     i64.extend_i32_s
     i64.shl
     i64.add
-    local.tee $1
-    local.get $5
+    local.tee $2
+    local.get $4
     i64.le_u
     if
-     local.get $4
+     local.get $3
      global.get $~lib/util/number/_K
      i32.add
      global.set $~lib/util/number/_K
+     local.get $0
+     local.get $5
      local.get $4
+     local.get $2
+     local.get $3
      i32.const 2
      i32.shl
      i32.const 1936
      i32.add
      i64.load32_u
-     local.get $10
+     local.get $8
      i64.extend_i32_s
      i64.shl
-     local.set $3
-     local.get $0
-     local.get $6
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.tee $2
-     i32.load16_u
-     local.set $4
-     loop $while-continue|3
-      i32.const 1
-      local.get $9
-      local.get $1
-      i64.sub
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.sub
-      i64.gt_u
-      local.get $1
-      local.get $3
-      i64.add
-      local.get $9
-      i64.lt_u
-      select
-      i32.const 0
-      local.get $5
-      local.get $1
-      i64.sub
-      local.get $3
-      i64.ge_u
-      i32.const 0
-      local.get $1
-      local.get $9
-      i64.lt_u
-      select
-      select
-      if
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $1
-       local.get $3
-       i64.add
-       local.set $1
-       br $while-continue|3
-      end
-     end
-     local.get $2
-     local.get $4
-     i32.store16
-     local.get $6
+     local.get $9
+     call $~lib/util/number/grisuRound
+     local.get $5
      return
     end
     br $while-continue|0
    end
   end
-  local.get $10
+  local.get $8
   i64.extend_i32_s
-  local.set $13
-  loop $while-continue|4 (result i32)
-   local.get $5
+  local.set $2
+  loop $while-continue|2
+   local.get $4
    i64.const 10
    i64.mul
-   local.set $5
-   local.get $8
+   local.set $4
+   local.get $1
    i64.const 10
    i64.mul
-   local.tee $3
-   local.get $13
-   i64.shr_u
    local.tee $1
-   local.get $6
+   local.get $2
+   i64.shr_u
+   local.tee $12
+   local.get $5
    i64.extend_i32_s
    i64.or
    i64.const 0
    i64.ne
    if
     local.get $0
-    local.get $6
+    local.get $5
     i32.const 1
     i32.shl
     i32.add
-    local.get $1
+    local.get $12
     i32.wrap_i64
     i32.const 65535
     i32.and
     i32.const 48
     i32.add
     i32.store16
-    local.get $6
+    local.get $5
     i32.const 1
     i32.add
-    local.set $6
+    local.set $5
    end
-   local.get $4
+   local.get $3
    i32.const 1
    i32.sub
-   local.set $4
-   local.get $3
-   local.get $12
+   local.set $3
+   local.get $1
+   local.get $11
    i64.and
-   local.tee $8
-   local.get $5
-   i64.ge_u
-   br_if $while-continue|4
-   local.get $4
-   global.get $~lib/util/number/_K
-   i32.add
-   global.set $~lib/util/number/_K
-   local.get $8
-   local.set $1
-   local.get $9
-   i32.const 0
+   local.tee $1
    local.get $4
-   i32.sub
-   i32.const 2
-   i32.shl
-   i32.const 1936
-   i32.add
-   i64.load32_u
-   i64.mul
-   local.set $3
-   local.get $0
-   local.get $6
-   i32.const 1
-   i32.sub
-   i32.const 1
-   i32.shl
-   i32.add
-   local.tee $2
-   i32.load16_u
-   local.set $4
-   loop $while-continue|6
-    i32.const 1
-    local.get $3
-    local.get $1
-    i64.sub
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.sub
-    i64.gt_u
-    local.get $1
-    local.get $11
-    i64.add
-    local.get $3
-    i64.lt_u
-    select
-    i32.const 0
-    local.get $5
-    local.get $1
-    i64.sub
-    local.get $11
-    i64.ge_u
-    i32.const 0
-    local.get $1
-    local.get $3
-    i64.lt_u
-    select
-    select
-    if
-     local.get $4
-     i32.const 1
-     i32.sub
-     local.set $4
-     local.get $1
-     local.get $11
-     i64.add
-     local.set $1
-     br $while-continue|6
-    end
-   end
-   local.get $2
-   local.get $4
-   i32.store16
-   local.get $6
+   i64.ge_u
+   br_if $while-continue|2
   end
+  local.get $3
+  global.get $~lib/util/number/_K
+  i32.add
+  global.set $~lib/util/number/_K
+  local.get $0
+  local.get $5
+  local.get $4
+  local.get $1
+  local.get $10
+  local.get $9
+  i32.const 0
+  local.get $3
+  i32.sub
+  i32.const 2
+  i32.shl
+  i32.const 1936
+  i32.add
+  i64.load32_u
+  i64.mul
+  call $~lib/util/number/grisuRound
+  local.get $5
+ )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i32)
+  (local $4 i64)
+  (local $5 i32)
+  (local $6 i64)
+  (local $7 i32)
+  local.get $0
+  i64.reinterpret_f64
+  local.tee $4
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.tee $5
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $4
+  i64.const 4503599627370495
+  i64.and
+  i64.add
+  local.tee $4
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.tee $6
+  i64.clz
+  i32.wrap_i64
+  local.set $3
+  local.get $6
+  local.get $3
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_plus
+  local.get $5
+  i32.const 1
+  local.get $5
+  select
+  i32.const 1075
+  i32.sub
+  local.tee $5
+  i32.const 1
+  i32.sub
+  local.get $3
+  i32.sub
+  local.set $3
+  local.get $4
+  local.get $4
+  i64.const 4503599627370496
+  i64.eq
+  i32.const 1
+  i32.add
+  local.tee $7
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $5
+  local.get $7
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+  i32.const 348
+  i32.const -61
+  global.get $~lib/util/number/_exp
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.tee $0
+  i32.trunc_f64_s
+  local.tee $3
+  local.get $3
+  f64.convert_i32_s
+  local.get $0
+  f64.ne
+  i32.add
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.tee $3
+  i32.const 3
+  i32.shl
+  local.tee $7
+  i32.sub
+  global.set $~lib/util/number/_K
+  local.get $7
+  i32.const 1064
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.const 1760
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+  global.get $~lib/util/number/_exp_pow
+  local.set $3
+  local.get $1
+  local.get $4
+  local.get $4
+  i64.clz
+  i32.wrap_i64
+  i64.extend_i32_s
+  i64.shl
+  global.get $~lib/util/number/_frc_pow
+  local.tee $4
+  call $~lib/util/number/umul64f
+  global.get $~lib/util/number/_frc_plus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.tee $6
+  global.get $~lib/util/number/_exp
+  local.get $3
+  i32.add
+  i32.const -64
+  i32.sub
+  local.get $6
+  global.get $~lib/util/number/_frc_minus
+  local.get $4
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  i64.sub
+  local.get $2
+  call $~lib/util/number/genDigits
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  block $~lib/util/memory/memmove|inlined.0
-   local.get $2
-   local.set $4
-   local.get $0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    local.get $1
-   i32.eq
-   br_if $~lib/util/memory/memmove|inlined.0
+   i32.const 7
+   i32.and
    local.get $0
-   local.get $1
-   i32.lt_u
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $0
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.set $4
-       local.get $0
-       local.tee $2
-       i32.const 1
-       i32.add
-       local.set $0
-       local.get $1
-       local.tee $3
-       i32.const 1
-       i32.add
-       local.set $1
-       local.get $2
-       local.get $3
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $4
-      i32.const 8
-      i32.ge_u
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     if
+      local.get $2
+      i32.eqz
       if
-       local.get $0
-       local.get $1
-       i64.load
-       i64.store
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.set $4
-       local.get $0
-       i32.const 8
-       i32.add
-       local.set $0
-       local.get $1
-       i32.const 8
-       i32.add
-       local.set $1
-       br $while-continue|1
+       return
       end
-     end
-    end
-    loop $while-continue|2
-     local.get $4
-     if
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
       local.get $0
-      local.tee $2
+      local.tee $3
       i32.const 1
       i32.add
       local.set $0
       local.get $1
-      local.tee $3
+      local.tee $4
       i32.const 1
       i32.add
       local.set $1
-      local.get $2
       local.get $3
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $4
-      i32.const 1
-      i32.sub
-      local.set $4
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    local.get $1
-    i32.const 7
-    i32.and
-    local.get $0
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
       local.get $0
-      local.get $4
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      if
-       local.get $4
-       i32.eqz
-       br_if $~lib/util/memory/memmove|inlined.0
-       local.get $4
-       i32.const 1
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $4
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      if
-       local.get $4
-       i32.const 8
-       i32.sub
-       local.tee $4
-       local.get $0
-       i32.add
-       local.get $1
-       local.get $4
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    if
+     local.get $0
+     local.tee $3
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $3
      local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
      if
-      local.get $4
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $4
-      local.get $0
+      local.tee $2
       i32.add
       local.get $1
-      local.get $4
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     if
+      local.get $0
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.tee $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
- (func $~lib/util/number/utoa_simple<u32> (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
   (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.tee $3
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.tee $4
+  local.set $2
   loop $do-continue|0
    local.get $1
    i32.const 10
    i32.rem_u
-   local.set $3
+   local.set $5
    local.get $1
    i32.const 10
    i32.div_u
@@ -998,13 +1159,20 @@
    i32.const 1
    i32.shl
    i32.add
-   local.get $3
+   local.get $5
    i32.const 48
    i32.add
    i32.store16
    local.get $1
    br_if $do-continue|0
   end
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $3
+  select
+  i32.store16
+  local.get $4
  )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -1057,490 +1225,151 @@
     end
    end
    local.get $0
-   local.get $3
-   i32.const 1
-   i32.shl
-   i32.add
-   i32.const 3145774
-   i32.store
-   local.get $3
-   i32.const 2
-   i32.add
-  else
-   local.get $3
-   i32.const 21
-   i32.le_s
-   i32.const 0
-   local.get $3
-   i32.const 0
-   i32.gt_s
-   select
-   if (result i32)
-    local.get $0
-    local.get $3
-    i32.const 1
-    i32.shl
-    i32.add
-    local.tee $0
-    i32.const 2
-    i32.add
-    local.get $0
-    i32.const 0
-    local.get $2
-    i32.sub
-    i32.const 1
-    i32.shl
-    call $~lib/memory/memory.copy
-    local.get $0
-    i32.const 46
-    i32.store16
-    local.get $1
-    i32.const 1
-    i32.add
-   else
-    local.get $3
-    i32.const 0
-    i32.le_s
-    i32.const 0
-    i32.const -6
-    local.get $3
-    i32.lt_s
-    select
-    if (result i32)
-     local.get $0
-     i32.const 2
-     local.get $3
-     i32.sub
-     local.tee $3
-     i32.const 1
-     i32.shl
-     i32.add
-     local.get $0
-     local.get $1
-     i32.const 1
-     i32.shl
-     call $~lib/memory/memory.copy
-     local.get $0
-     i32.const 3014704
-     i32.store
-     i32.const 2
-     local.set $2
-     loop $for-loop|1
-      local.get $2
-      local.get $3
-      i32.lt_s
-      if
-       local.get $0
-       local.get $2
-       i32.const 1
-       i32.shl
-       i32.add
-       i32.const 48
-       i32.store16
-       local.get $2
-       i32.const 1
-       i32.add
-       local.set $2
-       br $for-loop|1
-      end
-     end
-     local.get $1
-     local.get $3
-     i32.add
-    else
-     local.get $1
-     i32.const 1
-     i32.eq
-     if (result i32)
-      local.get $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      local.tee $1
-      i32.const 4
-      i32.add
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $2
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $1
-      i32.const 45
-      i32.const 43
-      local.get $2
-      select
-      i32.store16 offset=4
-      local.get $0
-      i32.const 2
-      i32.add
-     else
-      local.get $0
-      i32.const 4
-      i32.add
-      local.get $0
-      i32.const 2
-      i32.add
-      local.get $1
-      i32.const 1
-      i32.shl
-      local.tee $2
-      i32.const 2
-      i32.sub
-      call $~lib/memory/memory.copy
-      local.get $0
-      i32.const 46
-      i32.store16 offset=2
-      local.get $0
-      local.get $2
-      i32.add
-      local.tee $0
-      i32.const 101
-      i32.store16 offset=2
-      local.get $0
-      local.tee $2
-      i32.const 4
-      i32.add
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.tee $0
-      i32.const 0
-      i32.lt_s
-      local.tee $3
-      if
-       i32.const 0
-       local.get $0
-       i32.sub
-       local.set $0
-      end
-      local.get $0
-      local.get $0
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.tee $0
-      call $~lib/util/number/utoa_simple<u32>
-      local.get $2
-      i32.const 45
-      i32.const 43
-      local.get $3
-      select
-      i32.store16 offset=4
-      local.get $0
-      local.get $1
-      i32.add
-      i32.const 2
-      i32.add
-     end
-    end
-   end
-  end
- )
- (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
-  (local $2 i64)
-  (local $3 i64)
-  (local $4 i32)
-  (local $5 i64)
-  (local $6 i32)
-  (local $7 i64)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i64)
-  local.get $1
-  f64.const 0
-  f64.lt
-  local.tee $8
-  if (result f64)
-   local.get $0
-   i32.const 45
-   i32.store16
-   local.get $1
-   f64.neg
-  else
-   local.get $1
-  end
-  i64.reinterpret_f64
-  local.tee $3
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.tee $6
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $3
-  i64.const 4503599627370495
-  i64.and
-  i64.add
-  local.tee $2
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.tee $3
-  local.get $3
-  i64.clz
-  i32.wrap_i64
-  local.tee $4
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_plus
-  local.get $6
-  i32.const 1
-  local.get $6
-  select
-  i32.const 1075
-  i32.sub
-  local.tee $6
-  i32.const 1
-  i32.sub
-  local.get $4
-  i32.sub
-  local.set $4
-  local.get $2
-  local.get $2
-  i64.const 4503599627370496
-  i64.eq
-  i32.const 1
-  i32.add
-  local.tee $9
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $6
-  local.get $9
-  i32.sub
-  local.get $4
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $4
-  global.set $~lib/util/number/_exp
-  i32.const 348
-  i32.const -61
-  global.get $~lib/util/number/_exp
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.tee $1
-  i32.trunc_f64_s
-  local.tee $4
-  local.get $4
-  f64.convert_i32_s
-  local.get $1
-  f64.ne
-  i32.add
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.tee $4
-  i32.const 3
-  i32.shl
-  local.tee $9
-  i32.sub
-  global.set $~lib/util/number/_K
-  local.get $9
-  i32.const 1064
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  local.get $4
-  i32.const 1
-  i32.shl
-  i32.const 1760
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  global.get $~lib/util/number/_frc_pow
-  local.tee $3
-  i64.const 4294967295
-  i64.and
-  local.set $5
-  local.get $0
-  local.get $8
-  i32.const 1
-  i32.shl
-  i32.add
-  local.get $0
-  local.get $2
-  local.get $2
-  i64.clz
-  i32.wrap_i64
-  local.tee $0
-  i64.extend_i32_s
-  i64.shl
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $10
-  i64.mul
-  local.get $5
-  local.get $7
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $5
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $10
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  global.get $~lib/util/number/_exp_pow
-  local.tee $4
-  local.get $6
-  local.get $0
-  i32.sub
-  i32.add
-  i32.const -64
-  i32.sub
-  global.get $~lib/util/number/_frc_plus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $10
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $10
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $5
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $5
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.sub
-  local.tee $2
-  local.get $4
-  global.get $~lib/util/number/_exp
-  i32.add
-  i32.const -64
-  i32.sub
-  local.get $2
-  global.get $~lib/util/number/_frc_minus
-  local.tee $2
-  i64.const 32
-  i64.shr_u
-  local.tee $5
-  local.get $3
-  i64.const 32
-  i64.shr_u
-  local.tee $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  local.tee $3
-  local.get $5
-  i64.mul
-  local.get $2
-  i64.const 4294967295
-  i64.and
-  local.tee $2
-  local.get $3
-  i64.mul
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.tee $3
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.get $2
-  local.get $7
-  i64.mul
-  local.get $3
-  i64.const 4294967295
-  i64.and
-  i64.add
-  i64.const 2147483647
-  i64.add
-  i64.const 32
-  i64.shr_u
-  i64.add
-  i64.const 1
-  i64.add
-  i64.sub
-  local.get $8
-  call $~lib/util/number/genDigits
-  local.get $8
-  i32.sub
-  global.get $~lib/util/number/_K
-  call $~lib/util/number/prettify
-  local.get $8
-  i32.add
+   local.get $3
+   i32.const 1
+   i32.shl
+   i32.add
+   i32.const 3145774
+   i32.store
+   local.get $3
+   i32.const 2
+   i32.add
+  else
+   local.get $3
+   i32.const 21
+   i32.le_s
+   i32.const 0
+   local.get $3
+   i32.const 0
+   i32.gt_s
+   select
+   if (result i32)
+    local.get $0
+    local.get $3
+    i32.const 1
+    i32.shl
+    i32.add
+    local.tee $0
+    i32.const 2
+    i32.add
+    local.get $0
+    i32.const 0
+    local.get $2
+    i32.sub
+    i32.const 1
+    i32.shl
+    call $~lib/util/memory/memmove
+    local.get $0
+    i32.const 46
+    i32.store16
+    local.get $1
+    i32.const 1
+    i32.add
+   else
+    local.get $3
+    i32.const 0
+    i32.le_s
+    i32.const 0
+    i32.const -6
+    local.get $3
+    i32.lt_s
+    select
+    if (result i32)
+     local.get $0
+     i32.const 2
+     local.get $3
+     i32.sub
+     local.tee $3
+     i32.const 1
+     i32.shl
+     i32.add
+     local.get $0
+     local.get $1
+     i32.const 1
+     i32.shl
+     call $~lib/util/memory/memmove
+     local.get $0
+     i32.const 3014704
+     i32.store
+     i32.const 2
+     local.set $2
+     loop $for-loop|1
+      local.get $2
+      local.get $3
+      i32.lt_s
+      if
+       local.get $0
+       local.get $2
+       i32.const 1
+       i32.shl
+       i32.add
+       i32.const 48
+       i32.store16
+       local.get $2
+       i32.const 1
+       i32.add
+       local.set $2
+       br $for-loop|1
+      end
+     end
+     local.get $1
+     local.get $3
+     i32.add
+    else
+     local.get $1
+     i32.const 1
+     i32.eq
+     if (result i32)
+      local.get $0
+      i32.const 101
+      i32.store16 offset=2
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      i32.const 2
+      i32.add
+     else
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $0
+      i32.const 2
+      i32.add
+      local.get $1
+      i32.const 1
+      i32.shl
+      local.tee $2
+      i32.const 2
+      i32.sub
+      call $~lib/util/memory/memmove
+      local.get $0
+      i32.const 46
+      i32.store16 offset=2
+      local.get $0
+      local.get $2
+      i32.add
+      local.tee $0
+      i32.const 101
+      i32.store16 offset=2
+      local.get $0
+      i32.const 4
+      i32.add
+      local.get $3
+      i32.const 1
+      i32.sub
+      call $~lib/util/number/genExponent
+      local.get $1
+      i32.add
+      i32.const 2
+      i32.add
+     end
+    end
+   end
+  end
  )
  (func $~lib/util/number/dtoa_stream (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
@@ -1608,9 +1437,33 @@
    end
    unreachable
   end
+  local.get $1
+  f64.const 0
+  f64.lt
+  local.tee $2
+  if
+   local.get $0
+   i32.const 45
+   i32.store16
+   local.get $1
+   f64.neg
+   local.set $1
+  end
   local.get $0
+  local.get $2
+  i32.const 1
+  i32.shl
+  i32.add
   local.get $1
-  call $~lib/util/number/dtoa_core
+  local.get $0
+  local.get $2
+  call $~lib/util/number/grisu2
+  local.get $2
+  i32.sub
+  global.get $~lib/util/number/_K
+  call $~lib/util/number/prettify
+  local.get $2
+  i32.add
  )
  (func $~lib/wasi/index/abort (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1626,19 +1479,21 @@
   i32.const 544106784
   i32.store
   i32.const 2000
-  i32.const 2000
-  call $~lib/string/String#get:length
+  i32.const 1996
+  i32.load
+  i32.const 1
+  i32.shr_u
   i32.const 23
   call $~lib/string/String.UTF8.encodeUnsafe
   i32.const 23
   i32.add
-  local.tee $3
+  local.tee $2
   i32.const 40
   i32.store8
   local.get $0
   call $~lib/util/number/decimalCount32
   local.tee $4
-  local.get $3
+  local.get $2
   i32.const 1
   i32.add
   i32.add
@@ -1715,76 +1570,73 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
   call $~lib/string/String.UTF8.byteLength
-  local.tee $7
-  i32.const 56
-  i32.gt_s
-  local.set $6
-  local.get $7
+  local.tee $6
   i32.const 56
   local.get $6
+  i32.const 56
+  i32.gt_s
   select
   i32.const 13
   i32.add
   call $~lib/rt/stub/__alloc
-  local.tee $7
+  local.tee $6
   i32.const 8
   i32.add
   local.tee $8
   i32.const 4
   i32.add
-  local.set $6
-  local.get $7
+  local.set $7
   local.get $6
+  local.get $7
   i32.store
-  local.get $6
+  local.get $7
   i64.const 9071406388179572
   i64.store
-  local.get $7
+  local.get $6
   i32.const 7
   i32.store offset=4
   i32.const 2
-  local.get $7
+  local.get $6
   i32.const 1
   local.get $8
   call $~lib/bindings/wasi_snapshot_preview1/fd_write
   drop
-  local.get $7
-  i32.const 1040
-  i32.const 1040
-  call $~lib/string/String#get:length
   local.get $6
+  i32.const 1040
+  i32.const 1036
+  i32.load
+  i32.const 1
+  i32.shr_u
+  local.get $7
   call $~lib/string/String.UTF8.encodeUnsafe
   i32.store offset=4
   i32.const 2
-  local.get $7
+  local.get $6
   i32.const 1
   local.get $8
   call $~lib/bindings/wasi_snapshot_preview1/fd_write
   drop
   local.get $0
   if (result i32)
-   local.get $6
+   local.get $7
    i32.const 32
    i32.store8
    local.get $6
+   local.get $7
    i32.const 1
    i32.add
-   local.tee $6
+   local.tee $7
+   local.get $7
    local.get $1
    call $~lib/util/number/dtoa_stream
-   local.set $9
    local.get $7
-   local.get $6
-   local.get $9
-   local.get $6
    call $~lib/string/String.UTF8.encodeUnsafe
    i32.const 1
    i32.add
    i32.store offset=4
    i32.const 2
-   local.get $7
+   local.get $6
    i32.const 1
    local.get $8
    call $~lib/bindings/wasi_snapshot_preview1/fd_write
@@ -1793,18 +1645,18 @@
    i32.const 1
    i32.gt_s
    if
-    local.get $7
-    local.get $6
     local.get $6
+    local.get $7
+    local.get $7
     local.get $2
     call $~lib/util/number/dtoa_stream
-    local.get $6
+    local.get $7
     call $~lib/string/String.UTF8.encodeUnsafe
     i32.const 1
     i32.add
     i32.store offset=4
     i32.const 2
-    local.get $7
+    local.get $6
     i32.const 1
     local.get $8
     call $~lib/bindings/wasi_snapshot_preview1/fd_write
@@ -1813,18 +1665,18 @@
     i32.const 2
     i32.gt_s
     if
-     local.get $7
-     local.get $6
      local.get $6
+     local.get $7
+     local.get $7
      local.get $3
      call $~lib/util/number/dtoa_stream
-     local.get $6
+     local.get $7
      call $~lib/string/String.UTF8.encodeUnsafe
      i32.const 1
      i32.add
      i32.store offset=4
      i32.const 2
-     local.get $7
+     local.get $6
      i32.const 1
      local.get $8
      call $~lib/bindings/wasi_snapshot_preview1/fd_write
@@ -1833,18 +1685,18 @@
      i32.const 3
      i32.gt_s
      if
-      local.get $7
-      local.get $6
       local.get $6
+      local.get $7
+      local.get $7
       local.get $4
       call $~lib/util/number/dtoa_stream
-      local.get $6
+      local.get $7
       call $~lib/string/String.UTF8.encodeUnsafe
       i32.const 1
       i32.add
       i32.store offset=4
       i32.const 2
-      local.get $7
+      local.get $6
       i32.const 1
       local.get $8
       call $~lib/bindings/wasi_snapshot_preview1/fd_write
@@ -1853,18 +1705,18 @@
       i32.const 4
       i32.gt_s
       if
-       local.get $7
-       local.get $6
        local.get $6
+       local.get $7
+       local.get $7
        local.get $5
        call $~lib/util/number/dtoa_stream
-       local.get $6
+       local.get $7
        call $~lib/string/String.UTF8.encodeUnsafe
        i32.const 1
        i32.add
        i32.store offset=4
        i32.const 2
-       local.get $7
+       local.get $6
        i32.const 1
        local.get $8
        call $~lib/bindings/wasi_snapshot_preview1/fd_write
@@ -1873,29 +1725,29 @@
      end
     end
    end
-   local.get $6
+   local.get $7
    i32.const 1
    i32.sub
   else
-   local.get $6
+   local.get $7
   end
   i32.const 10
   i32.store8
-  local.get $7
+  local.get $6
   i32.const 1
   i32.store offset=4
   i32.const 2
-  local.get $7
+  local.get $6
   i32.const 1
   local.get $8
   call $~lib/bindings/wasi_snapshot_preview1/fd_write
   drop
-  local.get $7
+  local.get $6
   i32.const 15
   i32.and
   i32.eqz
   i32.const 0
-  local.get $7
+  local.get $6
   select
   i32.eqz
   if
@@ -1904,7 +1756,7 @@
    call $~lib/wasi/index/abort
    unreachable
   end
-  local.get $7
+  local.get $6
   i32.const 16
   i32.sub
   local.tee $0
@@ -1918,7 +1770,7 @@
    unreachable
   end
   global.get $~lib/rt/stub/offset
-  local.get $7
+  local.get $6
   local.get $0
   i32.load
   i32.add
diff --git a/tests/compiler/wasi/trace.untouched.wat b/tests/compiler/wasi/trace.untouched.wat
index c1b5d27963..c53659aaba 100644
--- a/tests/compiler/wasi/trace.untouched.wat
+++ b/tests/compiler/wasi/trace.untouched.wat
@@ -1,16 +1,20 @@
 (module
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
  (type $none_=>_none (func))
- (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i64_i64_i64_i64_=>_none (func (param i32 i32 i64 i64 i64 i64)))
  (type $i32_i32_f64_f64_f64_f64_f64_=>_none (func (param i32 i32 f64 f64 f64 f64 f64)))
+ (type $i64_i32_=>_none (func (param i64 i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_f64_=>_i32 (func (param i32 i32 f64) (result i32)))
  (type $i32_i64_i32_i64_i32_i64_i32_=>_i32 (func (param i32 i64 i32 i64 i32 i64 i32) (result i32)))
  (type $i32_f64_=>_i32 (func (param i32 f64) (result i32)))
+ (type $f64_i32_i32_=>_i32 (func (param f64 i32 i32) (result i32)))
+ (type $i64_i64_=>_i64 (func (param i64 i64) (result i64)))
  (import "wasi_snapshot_preview1" "fd_write" (func $~lib/bindings/wasi_snapshot_preview1/fd_write (param i32 i32 i32 i32) (result i32)))
  (import "wasi_snapshot_preview1" "proc_exit" (func $~lib/bindings/wasi_snapshot_preview1/proc_exit (param i32)))
  (memory $0 1)
@@ -484,6 +488,180 @@
   local.get $2
   i32.sub
  )
+ (func $~lib/util/number/normalizedBoundaries (param $0 i64) (param $1 i32)
+  (local $2 i64)
+  (local $3 i32)
+  (local $4 i32)
+  (local $5 i32)
+  local.get $0
+  i64.const 1
+  i64.shl
+  i64.const 1
+  i64.add
+  local.set $2
+  local.get $1
+  i32.const 1
+  i32.sub
+  local.set $3
+  local.get $2
+  i64.clz
+  i32.wrap_i64
+  local.set $4
+  local.get $2
+  local.get $4
+  i64.extend_i32_s
+  i64.shl
+  local.set $2
+  local.get $3
+  local.get $4
+  i32.sub
+  local.set $3
+  i32.const 1
+  local.get $0
+  i64.const 4503599627370496
+  i64.eq
+  i32.add
+  local.set $5
+  local.get $2
+  global.set $~lib/util/number/_frc_plus
+  local.get $0
+  local.get $5
+  i64.extend_i32_s
+  i64.shl
+  i64.const 1
+  i64.sub
+  local.get $1
+  local.get $5
+  i32.sub
+  local.get $3
+  i32.sub
+  i64.extend_i32_s
+  i64.shl
+  global.set $~lib/util/number/_frc_minus
+  local.get $3
+  global.set $~lib/util/number/_exp
+ )
+ (func $~lib/util/number/getCachedPower (param $0 i32)
+  (local $1 f64)
+  (local $2 i32)
+  (local $3 i32)
+  i32.const -61
+  local.get $0
+  i32.sub
+  f64.convert_i32_s
+  f64.const 0.30102999566398114
+  f64.mul
+  f64.const 347
+  f64.add
+  local.set $1
+  local.get $1
+  i32.trunc_f64_s
+  local.set $2
+  local.get $2
+  local.get $2
+  f64.convert_i32_s
+  local.get $1
+  f64.ne
+  i32.add
+  local.set $2
+  local.get $2
+  i32.const 3
+  i32.shr_s
+  i32.const 1
+  i32.add
+  local.set $3
+  i32.const 348
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.sub
+  global.set $~lib/util/number/_K
+  i32.const 56
+  local.get $3
+  i32.const 3
+  i32.shl
+  i32.add
+  i64.load
+  global.set $~lib/util/number/_frc_pow
+  i32.const 752
+  local.get $3
+  i32.const 1
+  i32.shl
+  i32.add
+  i32.load16_s
+  global.set $~lib/util/number/_exp_pow
+ )
+ (func $~lib/util/number/umul64f (param $0 i64) (param $1 i64) (result i64)
+  (local $2 i64)
+  (local $3 i64)
+  (local $4 i64)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i64)
+  (local $8 i64)
+  local.get $0
+  i64.const 4294967295
+  i64.and
+  local.set $2
+  local.get $1
+  i64.const 4294967295
+  i64.and
+  local.set $3
+  local.get $0
+  i64.const 32
+  i64.shr_u
+  local.set $4
+  local.get $1
+  i64.const 32
+  i64.shr_u
+  local.set $5
+  local.get $2
+  local.get $3
+  i64.mul
+  local.set $6
+  local.get $4
+  local.get $3
+  i64.mul
+  local.get $6
+  i64.const 32
+  i64.shr_u
+  i64.add
+  local.set $7
+  local.get $2
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.const 4294967295
+  i64.and
+  i64.add
+  local.set $8
+  local.get $8
+  i64.const 2147483647
+  i64.add
+  local.set $8
+  local.get $7
+  i64.const 32
+  i64.shr_u
+  local.set $7
+  local.get $8
+  i64.const 32
+  i64.shr_u
+  local.set $8
+  local.get $4
+  local.get $5
+  i64.mul
+  local.get $7
+  i64.add
+  local.get $8
+  i64.add
+ )
+ (func $~lib/util/number/umul64e (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.add
+  i32.const 64
+  i32.add
+ )
  (func $~lib/util/number/decimalCount32 (param $0 i32) (result i32)
   local.get $0
   i32.const 100000
@@ -539,6 +717,74 @@
   end
   unreachable
  )
+ (func $~lib/util/number/grisuRound (param $0 i32) (param $1 i32) (param $2 i64) (param $3 i64) (param $4 i64) (param $5 i64)
+  (local $6 i32)
+  (local $7 i32)
+  (local $8 i32)
+  local.get $0
+  local.get $1
+  i32.const 1
+  i32.sub
+  i32.const 1
+  i32.shl
+  i32.add
+  local.set $6
+  local.get $6
+  i32.load16_u
+  local.set $7
+  loop $while-continue|1
+   local.get $3
+   local.get $5
+   i64.lt_u
+   if (result i32)
+    local.get $2
+    local.get $3
+    i64.sub
+    local.get $4
+    i64.ge_u
+   else
+    i32.const 0
+   end
+   if (result i32)
+    local.get $3
+    local.get $4
+    i64.add
+    local.get $5
+    i64.lt_u
+    if (result i32)
+     i32.const 1
+    else
+     local.get $5
+     local.get $3
+     i64.sub
+     local.get $3
+     local.get $4
+     i64.add
+     local.get $5
+     i64.sub
+     i64.gt_u
+    end
+   else
+    i32.const 0
+   end
+   local.set $8
+   local.get $8
+   if
+    local.get $7
+    i32.const 1
+    i32.sub
+    local.set $7
+    local.get $3
+    local.get $4
+    i64.add
+    local.set $3
+    br $while-continue|1
+   end
+  end
+  local.get $6
+  local.get $7
+  i32.store16
+ )
  (func $~lib/util/number/genDigits (param $0 i32) (param $1 i64) (param $2 i32) (param $3 i64) (param $4 i32) (param $5 i64) (param $6 i32) (result i32)
   (local $7 i32)
   (local $8 i64)
@@ -554,14 +800,6 @@
   (local $18 i32)
   (local $19 i64)
   (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i32)
-  (local $25 i32)
-  (local $26 i32)
-  (local $27 i32)
-  (local $28 i64)
   i32.const 0
   local.get $4
   i32.sub
@@ -801,13 +1039,9 @@
      i32.add
      global.set $~lib/util/number/_K
      local.get $0
-     local.set $24
      local.get $15
-     local.set $18
      local.get $5
-     local.set $23
      local.get $19
-     local.set $22
      i32.const 928
      local.get $14
      i32.const 2
@@ -817,79 +1051,15 @@
      local.get $7
      i64.extend_i32_s
      i64.shl
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $24
-     local.get $18
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $25
-     local.get $25
-     i32.load16_u
-     local.set $26
-     loop $while-continue|3
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $23
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $27
-      local.get $27
-      if
-       local.get $26
-       i32.const 1
-       i32.sub
-       local.set $26
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|3
-      end
-     end
-     local.get $25
-     local.get $26
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
     br $while-continue|0
    end
   end
-  loop $while-continue|4
+  loop $while-continue|2
    i32.const 1
    local.set $16
    local.get $16
@@ -906,8 +1076,8 @@
     local.get $7
     i64.extend_i32_s
     i64.shr_u
-    local.set $23
-    local.get $23
+    local.set $20
+    local.get $20
     local.get $15
     i64.extend_i32_s
     i64.or
@@ -916,16 +1086,16 @@
     if
      local.get $0
      local.get $15
-     local.tee $26
+     local.tee $18
      i32.const 1
      i32.add
      local.set $15
-     local.get $26
+     local.get $18
      i32.const 1
      i32.shl
      i32.add
      i32.const 48
-     local.get $23
+     local.get $20
      i32.wrap_i64
      i32.const 65535
      i32.and
@@ -960,88 +1130,125 @@
      i64.mul
      local.set $10
      local.get $0
-     local.set $18
      local.get $15
-     local.set $27
      local.get $5
-     local.set $28
      local.get $13
-     local.set $22
      local.get $8
-     local.set $21
      local.get $10
-     local.set $20
-     local.get $18
-     local.get $27
-     i32.const 1
-     i32.sub
-     i32.const 1
-     i32.shl
-     i32.add
-     local.set $26
-     local.get $26
-     i32.load16_u
-     local.set $25
-     loop $while-continue|6
-      local.get $22
-      local.get $20
-      i64.lt_u
-      if (result i32)
-       local.get $28
-       local.get $22
-       i64.sub
-       local.get $21
-       i64.ge_u
-      else
-       i32.const 0
-      end
-      if (result i32)
-       local.get $22
-       local.get $21
-       i64.add
-       local.get $20
-       i64.lt_u
-       if (result i32)
-        i32.const 1
-       else
-        local.get $20
-        local.get $22
-        i64.sub
-        local.get $22
-        local.get $21
-        i64.add
-        local.get $20
-        i64.sub
-        i64.gt_u
-       end
-      else
-       i32.const 0
-      end
-      local.set $24
-      local.get $24
-      if
-       local.get $25
-       i32.const 1
-       i32.sub
-       local.set $25
-       local.get $22
-       local.get $21
-       i64.add
-       local.set $22
-       br $while-continue|6
-      end
-     end
-     local.get $26
-     local.get $25
-     i32.store16
+     call $~lib/util/number/grisuRound
      local.get $15
      return
     end
-    br $while-continue|4
+    br $while-continue|2
    end
   end
   unreachable
  )
+ (func $~lib/util/number/grisu2 (param $0 f64) (param $1 i32) (param $2 i32) (result i32)
+  (local $3 i64)
+  (local $4 i32)
+  (local $5 i64)
+  (local $6 i64)
+  (local $7 i32)
+  (local $8 i64)
+  (local $9 i32)
+  (local $10 i64)
+  (local $11 i32)
+  (local $12 i64)
+  (local $13 i32)
+  (local $14 i64)
+  (local $15 i64)
+  local.get $0
+  i64.reinterpret_f64
+  local.set $3
+  local.get $3
+  i64.const 9218868437227405312
+  i64.and
+  i64.const 52
+  i64.shr_u
+  i32.wrap_i64
+  local.set $4
+  local.get $3
+  i64.const 4503599627370495
+  i64.and
+  local.set $5
+  local.get $4
+  i32.const 0
+  i32.ne
+  i64.extend_i32_u
+  i64.const 52
+  i64.shl
+  local.get $5
+  i64.add
+  local.set $6
+  local.get $4
+  i32.const 1
+  local.get $4
+  select
+  i32.const 1023
+  i32.const 52
+  i32.add
+  i32.sub
+  local.set $4
+  local.get $6
+  local.get $4
+  call $~lib/util/number/normalizedBoundaries
+  global.get $~lib/util/number/_exp
+  call $~lib/util/number/getCachedPower
+  local.get $6
+  i64.clz
+  i32.wrap_i64
+  local.set $7
+  local.get $6
+  local.get $7
+  i64.extend_i32_s
+  i64.shl
+  local.set $6
+  local.get $4
+  local.get $7
+  i32.sub
+  local.set $4
+  global.get $~lib/util/number/_frc_pow
+  local.set $8
+  global.get $~lib/util/number/_exp_pow
+  local.set $9
+  local.get $6
+  local.get $8
+  call $~lib/util/number/umul64f
+  local.set $10
+  local.get $4
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $11
+  global.get $~lib/util/number/_frc_plus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.sub
+  local.set $12
+  global.get $~lib/util/number/_exp
+  local.get $9
+  call $~lib/util/number/umul64e
+  local.set $13
+  global.get $~lib/util/number/_frc_minus
+  local.get $8
+  call $~lib/util/number/umul64f
+  i64.const 1
+  i64.add
+  local.set $14
+  local.get $12
+  local.get $14
+  i64.sub
+  local.set $15
+  local.get $1
+  local.get $10
+  local.get $11
+  local.get $12
+  local.get $13
+  local.get $15
+  local.get $2
+  call $~lib/util/number/genDigits
+ )
  (func $~lib/util/memory/memcpy (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2066,238 +2273,233 @@
    i32.store8
   end
  )
- (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+ (func $~lib/util/memory/memmove (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
-  (local $5 i32)
-  (local $6 i32)
-  (local $7 i32)
-  block $~lib/util/memory/memmove|inlined.0
+  local.get $0
+  local.get $1
+  i32.eq
+  if
+   return
+  end
+  i32.const 0
+  i32.const 1
+  i32.lt_s
+  drop
+  local.get $1
+  local.get $2
+  i32.add
+  local.get $0
+  i32.le_u
+  if (result i32)
+   i32.const 1
+  else
+   local.get $0
+   local.get $2
+   i32.add
+   local.get $1
+   i32.le_u
+  end
+  if
    local.get $0
-   local.set $5
    local.get $1
-   local.set $4
    local.get $2
-   local.set $3
-   local.get $5
-   local.get $4
-   i32.eq
-   if
-    br $~lib/util/memory/memmove|inlined.0
-   end
+   call $~lib/util/memory/memcpy
+   return
+  end
+  local.get $0
+  local.get $1
+  i32.lt_u
+  if
    i32.const 0
-   i32.const 1
+   i32.const 2
    i32.lt_s
    drop
-   local.get $4
-   local.get $3
-   i32.add
-   local.get $5
-   i32.le_u
-   if (result i32)
-    i32.const 1
-   else
-    local.get $5
-    local.get $3
-    i32.add
-    local.get $4
-    i32.le_u
-   end
-   if
-    local.get $5
-    local.get $4
-    local.get $3
-    call $~lib/util/memory/memcpy
-    br $~lib/util/memory/memmove|inlined.0
-   end
-   local.get $5
-   local.get $4
-   i32.lt_u
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
    if
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|0
-      local.get $5
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.set $3
-       local.get $5
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $5
-       local.get $7
-       local.get $4
-       local.tee $7
-       i32.const 1
-       i32.add
-       local.set $4
-       local.get $7
-       i32.load8_u
-       i32.store8
-       br $while-continue|0
-      end
-     end
-     loop $while-continue|1
-      local.get $3
-      i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $5
-       local.get $4
-       i64.load
-       i64.store
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       i32.const 8
-       i32.add
-       local.set $5
-       local.get $4
-       i32.const 8
-       i32.add
-       local.set $4
-       br $while-continue|1
-      end
-     end
-    end
-    loop $while-continue|2
+    loop $while-continue|0
+     local.get $0
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.tee $7
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $2
+      i32.const 1
+      i32.sub
+      local.set $2
+      local.get $0
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $5
-      local.get $7
+      local.set $0
       local.get $4
-      local.tee $7
+      local.get $1
+      local.tee $4
       i32.const 1
       i32.add
-      local.set $4
-      local.get $7
+      local.set $1
+      local.get $4
       i32.load8_u
       i32.store8
-      local.get $3
-      i32.const 1
-      i32.sub
-      local.set $3
-      br $while-continue|2
+      br $while-continue|0
      end
     end
-   else
-    i32.const 0
-    i32.const 2
-    i32.lt_s
-    drop
-    local.get $4
-    i32.const 7
-    i32.and
-    local.get $5
-    i32.const 7
-    i32.and
-    i32.eq
-    if
-     loop $while-continue|3
-      local.get $5
-      local.get $3
+    loop $while-continue|1
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $0
+      local.get $1
+      i64.load
+      i64.store
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      i32.const 8
       i32.add
-      i32.const 7
-      i32.and
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.eqz
-       if
-        br $~lib/util/memory/memmove|inlined.0
-       end
-       local.get $5
-       local.get $3
-       i32.const 1
-       i32.sub
-       local.tee $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i32.load8_u
-       i32.store8
-       br $while-continue|3
-      end
-     end
-     loop $while-continue|4
-      local.get $3
+      local.set $0
+      local.get $1
       i32.const 8
-      i32.ge_u
-      local.set $6
-      local.get $6
-      if
-       local.get $3
-       i32.const 8
-       i32.sub
-       local.set $3
-       local.get $5
-       local.get $3
-       i32.add
-       local.get $4
-       local.get $3
-       i32.add
-       i64.load
-       i64.store
-       br $while-continue|4
-      end
+      i32.add
+      local.set $1
+      br $while-continue|1
      end
     end
-    loop $while-continue|5
+   end
+   loop $while-continue|2
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $0
+     local.get $4
+     local.get $1
+     local.tee $4
+     i32.const 1
+     i32.add
+     local.set $1
+     local.get $4
+     i32.load8_u
+     i32.store8
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.set $2
+     br $while-continue|2
+    end
+   end
+  else
+   i32.const 0
+   i32.const 2
+   i32.lt_s
+   drop
+   local.get $1
+   i32.const 7
+   i32.and
+   local.get $0
+   i32.const 7
+   i32.and
+   i32.eq
+   if
+    loop $while-continue|3
+     local.get $0
+     local.get $2
+     i32.add
+     i32.const 7
+     i32.and
+     local.set $3
      local.get $3
-     local.set $6
-     local.get $6
      if
-      local.get $5
-      local.get $3
+      local.get $2
+      i32.eqz
+      if
+       return
+      end
+      local.get $0
+      local.get $2
       i32.const 1
       i32.sub
-      local.tee $3
+      local.tee $2
       i32.add
-      local.get $4
-      local.get $3
+      local.get $1
+      local.get $2
       i32.add
       i32.load8_u
       i32.store8
-      br $while-continue|5
+      br $while-continue|3
+     end
+    end
+    loop $while-continue|4
+     local.get $2
+     i32.const 8
+     i32.ge_u
+     local.set $3
+     local.get $3
+     if
+      local.get $2
+      i32.const 8
+      i32.sub
+      local.set $2
+      local.get $0
+      local.get $2
+      i32.add
+      local.get $1
+      local.get $2
+      i32.add
+      i64.load
+      i64.store
+      br $while-continue|4
      end
     end
    end
+   loop $while-continue|5
+    local.get $2
+    local.set $3
+    local.get $3
+    if
+     local.get $0
+     local.get $2
+     i32.const 1
+     i32.sub
+     local.tee $2
+     i32.add
+     local.get $1
+     local.get $2
+     i32.add
+     i32.load8_u
+     i32.store8
+     br $while-continue|5
+    end
+   end
   end
  )
+ (func $~lib/memory/memory.copy (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/memory/memmove
+ )
  (func $~lib/util/number/utoa32_lut (param $0 i32) (param $1 i32) (param $2 i32)
   (local $3 i32)
   (local $4 i32)
@@ -2438,16 +2640,52 @@
    i32.store16
   end
  )
+ (func $~lib/util/number/utoa32_core (param $0 i32) (param $1 i32) (param $2 i32)
+  i32.const 0
+  i32.const 1
+  i32.ge_s
+  drop
+  local.get $0
+  local.get $1
+  local.get $2
+  call $~lib/util/number/utoa32_lut
+ )
+ (func $~lib/util/number/genExponent (param $0 i32) (param $1 i32) (result i32)
+  (local $2 i32)
+  (local $3 i32)
+  local.get $1
+  i32.const 0
+  i32.lt_s
+  local.set $2
+  local.get $2
+  if
+   i32.const 0
+   local.get $1
+   i32.sub
+   local.set $1
+  end
+  local.get $1
+  call $~lib/util/number/decimalCount32
+  i32.const 1
+  i32.add
+  local.set $3
+  local.get $0
+  local.get $1
+  local.get $3
+  call $~lib/util/number/utoa32_core
+  local.get $0
+  i32.const 45
+  i32.const 43
+  local.get $2
+  select
+  i32.store16
+  local.get $3
+ )
  (func $~lib/util/number/prettify (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $2
   i32.eqz
   if
@@ -2630,48 +2868,10 @@
       local.get $0
       i32.const 4
       i32.add
-      local.set $5
       local.get $3
       i32.const 1
       i32.sub
-      local.set $6
-      local.get $6
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $6
-       i32.sub
-       local.set $6
-      end
-      local.get $6
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $7
-      local.get $5
-      local.set $10
-      local.get $6
-      local.set $9
-      local.get $7
-      local.set $8
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $10
-      local.get $9
-      local.get $8
-      call $~lib/util/number/utoa32_lut
-      local.get $5
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $7
+      call $~lib/util/number/genExponent
       local.set $1
       local.get $1
       i32.const 2
@@ -2681,14 +2881,14 @@
       local.get $1
       i32.const 1
       i32.shl
-      local.set $7
+      local.set $4
       local.get $0
       i32.const 4
       i32.add
       local.get $0
       i32.const 2
       i32.add
-      local.get $7
+      local.get $4
       i32.const 2
       i32.sub
       call $~lib/memory/memory.copy
@@ -2696,58 +2896,20 @@
       i32.const 46
       i32.store16 offset=2
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 101
       i32.store16 offset=2
       local.get $1
       local.get $0
-      local.get $7
+      local.get $4
       i32.add
       i32.const 4
       i32.add
-      local.set $9
       local.get $3
       i32.const 1
       i32.sub
-      local.set $8
-      local.get $8
-      i32.const 0
-      i32.lt_s
-      local.set $4
-      local.get $4
-      if
-       i32.const 0
-       local.get $8
-       i32.sub
-       local.set $8
-      end
-      local.get $8
-      call $~lib/util/number/decimalCount32
-      i32.const 1
-      i32.add
-      local.set $5
-      local.get $9
-      local.set $11
-      local.get $8
-      local.set $6
-      local.get $5
-      local.set $10
-      i32.const 0
-      i32.const 1
-      i32.ge_s
-      drop
-      local.get $11
-      local.get $6
-      local.get $10
-      call $~lib/util/number/utoa32_lut
-      local.get $9
-      i32.const 45
-      i32.const 43
-      local.get $4
-      select
-      i32.store16
-      local.get $5
+      call $~lib/util/number/genExponent
       i32.add
       local.set $1
       local.get $1
@@ -2766,31 +2928,6 @@
  (func $~lib/util/number/dtoa_core (param $0 i32) (param $1 f64) (result i32)
   (local $2 i32)
   (local $3 i32)
-  (local $4 i32)
-  (local $5 f64)
-  (local $6 i64)
-  (local $7 i32)
-  (local $8 i64)
-  (local $9 i64)
-  (local $10 i32)
-  (local $11 i64)
-  (local $12 i64)
-  (local $13 i32)
-  (local $14 i32)
-  (local $15 i32)
-  (local $16 f64)
-  (local $17 i64)
-  (local $18 i64)
-  (local $19 i64)
-  (local $20 i64)
-  (local $21 i64)
-  (local $22 i64)
-  (local $23 i64)
-  (local $24 i64)
-  (local $25 i64)
-  (local $26 i32)
-  (local $27 i64)
-  (local $28 i32)
   local.get $1
   f64.const 0
   f64.lt
@@ -2805,387 +2942,22 @@
    i32.store16
   end
   local.get $1
-  local.set $5
   local.get $0
-  local.set $4
   local.get $2
+  call $~lib/util/number/grisu2
   local.set $3
-  local.get $5
-  i64.reinterpret_f64
-  local.set $6
-  local.get $6
-  i64.const 9218868437227405312
-  i64.and
-  i64.const 52
-  i64.shr_u
-  i32.wrap_i64
-  local.set $7
-  local.get $6
-  i64.const 4503599627370495
-  i64.and
-  local.set $8
-  local.get $7
-  i32.const 0
-  i32.ne
-  i64.extend_i32_u
-  i64.const 52
-  i64.shl
-  local.get $8
-  i64.add
-  local.set $9
-  local.get $7
-  i32.const 1
-  local.get $7
-  select
-  i32.const 1023
-  i32.const 52
-  i32.add
-  i32.sub
-  local.set $7
-  local.get $9
-  local.set $11
-  local.get $7
-  local.set $10
-  local.get $11
-  i64.const 1
-  i64.shl
-  i64.const 1
-  i64.add
-  local.set $12
-  local.get $10
-  i32.const 1
-  i32.sub
-  local.set $13
-  local.get $12
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $12
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $12
-  local.get $13
-  local.get $14
-  i32.sub
-  local.set $13
-  i32.const 1
-  local.get $11
-  i64.const 4503599627370496
-  i64.eq
-  i32.add
-  local.set $15
-  local.get $12
-  global.set $~lib/util/number/_frc_plus
-  local.get $11
-  local.get $15
-  i64.extend_i32_s
-  i64.shl
-  i64.const 1
-  i64.sub
-  local.get $10
-  local.get $15
-  i32.sub
-  local.get $13
-  i32.sub
-  i64.extend_i32_s
-  i64.shl
-  global.set $~lib/util/number/_frc_minus
-  local.get $13
-  global.set $~lib/util/number/_exp
-  global.get $~lib/util/number/_exp
-  local.set $10
-  i32.const -61
-  local.get $10
-  i32.sub
-  f64.convert_i32_s
-  f64.const 0.30102999566398114
-  f64.mul
-  f64.const 347
-  f64.add
-  local.set $16
-  local.get $16
-  i32.trunc_f64_s
-  local.set $15
-  local.get $15
-  local.get $15
-  f64.convert_i32_s
-  local.get $16
-  f64.ne
-  i32.add
-  local.set $15
-  local.get $15
-  i32.const 3
-  i32.shr_s
-  i32.const 1
-  i32.add
-  local.set $14
-  i32.const 348
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.sub
-  global.set $~lib/util/number/_K
-  i32.const 56
-  local.get $14
-  i32.const 3
-  i32.shl
-  i32.add
-  i64.load
-  global.set $~lib/util/number/_frc_pow
-  i32.const 752
-  local.get $14
-  i32.const 1
-  i32.shl
-  i32.add
-  i32.load16_s
-  global.set $~lib/util/number/_exp_pow
-  local.get $9
-  i64.clz
-  i32.wrap_i64
-  local.set $14
-  local.get $9
-  local.get $14
-  i64.extend_i32_s
-  i64.shl
-  local.set $9
-  local.get $7
-  local.get $14
-  i32.sub
-  local.set $7
-  global.get $~lib/util/number/_frc_pow
-  local.set $12
-  global.get $~lib/util/number/_exp_pow
-  local.set $15
-  local.get $9
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $24
-  local.get $24
-  i64.const 2147483647
-  i64.add
-  local.set $24
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $24
-  i64.const 32
-  i64.shr_u
-  local.set $24
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $24
-  i64.add
-  local.set $24
-  local.get $7
-  local.set $10
-  local.get $15
-  local.set $13
-  local.get $10
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $10
-  global.get $~lib/util/number/_frc_plus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $23
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $22
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $23
-  local.get $22
-  i64.mul
-  local.set $19
-  local.get $21
-  local.get $22
-  i64.mul
-  local.get $19
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $18
-  local.get $23
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $25
-  local.get $25
-  i64.const 2147483647
-  i64.add
-  local.set $25
-  local.get $18
-  i64.const 32
-  i64.shr_u
-  local.set $18
-  local.get $25
-  i64.const 32
-  i64.shr_u
-  local.set $25
-  local.get $21
-  local.get $20
-  i64.mul
-  local.get $18
-  i64.add
-  local.get $25
-  i64.add
-  i64.const 1
-  i64.sub
-  local.set $25
-  global.get $~lib/util/number/_exp
-  local.set $26
-  local.get $15
-  local.set $13
-  local.get $26
-  local.get $13
-  i32.add
-  i32.const 64
-  i32.add
-  local.set $26
-  global.get $~lib/util/number/_frc_minus
-  local.set $17
-  local.get $12
-  local.set $11
-  local.get $17
-  i64.const 4294967295
-  i64.and
-  local.set $18
-  local.get $11
-  i64.const 4294967295
-  i64.and
-  local.set $19
-  local.get $17
-  i64.const 32
-  i64.shr_u
-  local.set $20
-  local.get $11
-  i64.const 32
-  i64.shr_u
-  local.set $21
-  local.get $18
-  local.get $19
-  i64.mul
-  local.set $22
-  local.get $20
-  local.get $19
-  i64.mul
-  local.get $22
-  i64.const 32
-  i64.shr_u
-  i64.add
-  local.set $23
-  local.get $18
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.const 4294967295
-  i64.and
-  i64.add
-  local.set $27
-  local.get $27
-  i64.const 2147483647
-  i64.add
-  local.set $27
-  local.get $23
-  i64.const 32
-  i64.shr_u
-  local.set $23
-  local.get $27
-  i64.const 32
-  i64.shr_u
-  local.set $27
-  local.get $20
-  local.get $21
-  i64.mul
-  local.get $23
-  i64.add
-  local.get $27
-  i64.add
-  i64.const 1
-  i64.add
-  local.set $27
-  local.get $25
-  local.get $27
-  i64.sub
-  local.set $23
-  local.get $4
-  local.get $24
-  local.get $10
-  local.get $25
-  local.get $26
-  local.get $23
-  local.get $3
-  call $~lib/util/number/genDigits
-  local.set $28
   local.get $0
   local.get $2
   i32.const 1
   i32.shl
   i32.add
-  local.get $28
+  local.get $3
   local.get $2
   i32.sub
   global.get $~lib/util/number/_K
   call $~lib/util/number/prettify
-  local.set $28
-  local.get $28
+  local.set $3
+  local.get $3
   local.get $2
   i32.add
  )
diff --git a/tests/compiler/while.optimized.wat b/tests/compiler/while.optimized.wat
index 9a365e4cff..3f087519af 100644
--- a/tests/compiler/while.optimized.wat
+++ b/tests/compiler/while.optimized.wat
@@ -1,11 +1,12 @@
 (module
- (type $i32_=>_none (func (param i32)))
  (type $none_=>_none (func))
- (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
+ (type $i32_=>_none (func (param i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
- (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
  (type $i32_i32_i32_i32_=>_none (func (param i32 i32 i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (import "env" "abort" (func $~lib/builtins/abort (param i32 i32 i32 i32)))
  (import "rtrace" "onalloc" (func $~lib/rt/rtrace/onalloc (param i32)))
  (import "rtrace" "onincrement" (func $~lib/rt/rtrace/onincrement (param i32)))
@@ -110,6 +111,31 @@
   i32.const 1
   global.set $while/ran
  )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $2
+  local.get $1
+  i32.const 4
+  i32.shl
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -124,7 +150,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -146,7 +172,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -165,23 +191,23 @@
    local.get $2
    i32.clz
    i32.sub
-   local.tee $4
+   local.tee $3
    i32.const 4
    i32.sub
    i32.shr_u
    i32.const 16
    i32.xor
    local.set $2
-   local.get $4
+   local.get $3
    i32.const 7
    i32.sub
-   local.set $4
+   local.set $3
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $4
+  local.get $3
   i32.const 23
   i32.lt_u
   select
@@ -189,61 +215,53 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
   i32.load offset=20
-  local.set $3
+  local.set $4
   local.get $1
   i32.load offset=16
   local.tee $5
   if
    local.get $5
-   local.get $3
+   local.get $4
    i32.store offset=20
   end
-  local.get $3
+  local.get $4
   if
-   local.get $3
+   local.get $4
    local.get $5
    i32.store offset=16
   end
-  local.get $1
   local.get $0
+  local.get $3
   local.get $2
-  local.get $4
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
+  local.get $1
   i32.eq
   if
    local.get $0
+   local.get $3
    local.get $2
    local.get $4
-   i32.const 4
-   i32.shl
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $3
-   i32.store offset=96
-   local.get $3
+   call $~lib/rt/tlsf/SETHEAD
+   local.get $4
    i32.eqz
    if
     local.get $0
-    local.get $4
+    local.get $3
+    i32.const 2
+    i32.shl
+    i32.add
+    local.get $0
+    local.get $3
     i32.const 2
     i32.shl
     i32.add
-    local.tee $3
     i32.load offset=4
     i32.const 1
     local.get $2
@@ -251,9 +269,7 @@
     i32.const -1
     i32.xor
     i32.and
-    local.set $1
-    local.get $3
-    local.get $1
+    local.tee $1
     i32.store offset=4
     local.get $1
     i32.eqz
@@ -262,7 +278,7 @@
      local.get $0
      i32.load
      i32.const 1
-     local.get $4
+     local.get $3
      i32.shl
      i32.const -1
      i32.xor
@@ -285,7 +301,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -299,7 +315,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -312,9 +328,9 @@
   i32.const -4
   i32.and
   i32.add
-  local.tee $4
-  i32.load
   local.tee $5
+  i32.load
+  local.tee $6
   i32.const 1
   i32.and
   if
@@ -323,7 +339,7 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $6
    i32.const -4
    i32.and
    i32.add
@@ -332,7 +348,7 @@
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
@@ -350,9 +366,9 @@
     i32.const -4
     i32.and
     i32.add
-    local.tee $4
+    local.tee $5
     i32.load
-    local.set $5
+    local.set $6
    end
   end
   local.get $3
@@ -372,7 +388,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -405,8 +421,8 @@
     local.set $1
    end
   end
-  local.get $4
   local.get $5
+  local.get $6
   i32.const 2
   i32.or
   i32.store
@@ -427,27 +443,27 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
+  local.get $5
   local.get $2
   local.get $1
   i32.const 16
   i32.add
   i32.add
-  local.get $4
   i32.ne
   if
    i32.const 0
    i32.const 1072
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $5
   i32.const 4
   i32.sub
   local.get $1
@@ -476,13 +492,13 @@
    local.get $3
    i32.const 7
    i32.sub
-   local.set $6
+   local.set $4
   end
   local.get $2
   i32.const 16
   i32.lt_u
   i32.const 0
-  local.get $6
+  local.get $4
   i32.const 23
   i32.lt_u
   select
@@ -490,21 +506,15 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $3
   local.get $1
   i32.const 0
@@ -519,31 +529,28 @@
    i32.store offset=16
   end
   local.get $0
+  local.get $4
   local.get $2
-  local.get $6
-  i32.const 4
-  i32.shl
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
   local.get $1
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
   i32.const 1
-  local.get $6
+  local.get $4
   i32.shl
   i32.or
   i32.store
   local.get $0
-  local.get $6
+  local.get $4
   i32.const 2
   i32.shl
   i32.add
-  local.tee $0
   local.get $0
+  local.get $4
+  i32.const 2
+  i32.shl
+  i32.add
   i32.load offset=4
   i32.const 1
   local.get $2
@@ -573,7 +580,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
@@ -590,7 +597,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -618,7 +625,7 @@
    if
     i32.const 0
     i32.const 1072
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -670,7 +677,7 @@
   (local $1 i32)
   (local $2 i32)
   global.get $~lib/rt/tlsf/ROOT
-  local.tee $0
+  local.tee $2
   i32.eqz
   if
    i32.const 1
@@ -691,7 +698,8 @@
     unreachable
    end
    i32.const 1216
-   local.tee $0
+   local.set $2
+   i32.const 1216
    i32.const 0
    i32.store
    i32.const 2784
@@ -710,27 +718,21 @@
      i32.const 0
      i32.store offset=4
      i32.const 0
-     local.set $2
+     local.set $0
      loop $for-loop|1
-      local.get $2
+      local.get $0
       i32.const 16
       i32.lt_u
       if
-       local.get $1
-       i32.const 4
-       i32.shl
-       local.get $2
-       i32.add
-       i32.const 2
-       i32.shl
        i32.const 1216
-       i32.add
+       local.get $1
+       local.get $0
        i32.const 0
-       i32.store offset=96
-       local.get $2
+       call $~lib/rt/tlsf/SETHEAD
+       local.get $0
        i32.const 1
        i32.add
-       local.set $2
+       local.set $0
        br $for-loop|1
       end
      end
@@ -750,24 +752,23 @@
    i32.const 1216
    global.set $~lib/rt/tlsf/ROOT
   end
-  local.get $0
+  local.get $2
  )
  (func $~lib/rt/tlsf/searchBlock (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
+  (local $3 i32)
   local.get $0
   i32.load offset=4
   i32.const -2
   i32.and
-  local.tee $2
+  local.tee $1
   if (result i32)
    local.get $0
-   local.get $2
+   i32.const 0
+   local.get $1
    i32.ctz
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
+   call $~lib/rt/tlsf/GETHEAD
   else
    local.get $0
    i32.load
@@ -784,26 +785,22 @@
     i32.add
     i32.load offset=4
     local.tee $2
+    local.set $3
+    local.get $2
     i32.eqz
     if
      i32.const 0
      i32.const 1072
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.get $2
-    i32.ctz
     local.get $1
-    i32.const 4
-    i32.shl
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
+    local.get $3
+    i32.ctz
+    call $~lib/rt/tlsf/GETHEAD
    else
     i32.const 0
    end
@@ -817,7 +814,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -887,7 +884,7 @@
     if
      i32.const 0
      i32.const 1072
-     i32.const 513
+     i32.const 505
      i32.const 20
      call $~lib/builtins/abort
      unreachable
@@ -903,7 +900,7 @@
   if
    i32.const 0
    i32.const 1072
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -981,22 +978,17 @@
   call $~lib/rt/rtrace/onalloc
   local.get $1
  )
- (func $while/Ref#constructor (result i32)
-  (local $0 i32)
+ (func $~lib/rt/pure/__retain (param $0 i32) (result i32)
   (local $1 i32)
   (local $2 i32)
-  call $~lib/rt/tlsf/maybeInitialize
-  call $~lib/rt/tlsf/allocateBlock
-  i32.const 16
-  i32.add
-  local.tee $1
+  local.get $0
   i32.const 1216
   i32.gt_u
   if
-   local.get $1
+   local.get $0
    i32.const 16
    i32.sub
-   local.tee $0
+   local.tee $1
    i32.load offset=4
    local.tee $2
    i32.const -268435456
@@ -1015,14 +1007,14 @@
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $0
+   local.get $1
    local.get $2
    i32.const 1
    i32.add
    i32.store offset=4
-   local.get $0
+   local.get $1
    call $~lib/rt/rtrace/onincrement
-   local.get $0
+   local.get $1
    i32.load
    i32.const 1
    i32.and
@@ -1035,9 +1027,174 @@
     unreachable
    end
   end
+  local.get $0
+ )
+ (func $while/testRef
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.set $1
+  loop $while-continue|0
+   local.get $1
+   if
+    local.get $2
+    i32.const 1
+    i32.add
+    local.tee $2
+    i32.const 10
+    i32.eq
+    if
+     i32.const 0
+     local.set $0
+     local.get $1
+     if
+      local.get $1
+      i32.const 1216
+      i32.gt_u
+      if
+       local.get $1
+       i32.const 16
+       i32.sub
+       call $~lib/rt/pure/decrement
+      end
+     end
+    else
+     call $~lib/rt/tlsf/maybeInitialize
+     call $~lib/rt/tlsf/allocateBlock
+     i32.const 16
+     i32.add
+     call $~lib/rt/pure/__retain
+     local.set $0
+     local.get $1
+     i32.const 1216
+     i32.gt_u
+     if
+      local.get $1
+      i32.const 16
+      i32.sub
+      call $~lib/rt/pure/decrement
+     end
+    end
+    local.get $0
+    local.set $1
+    br $while-continue|0
+   end
+  end
+  local.get $2
+  i32.const 10
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 151
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $1
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 152
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $while/ran
   local.get $1
+  i32.const 1216
+  i32.gt_u
+  if
+   local.get $1
+   i32.const 16
+   i32.sub
+   call $~lib/rt/pure/decrement
+  end
  )
- (func $~lib/rt/pure/__release (param $0 i32)
+ (func $while/testRefAutorelease
+  (local $0 i32)
+  (local $1 i32)
+  (local $2 i32)
+  (local $3 i32)
+  call $~lib/rt/tlsf/maybeInitialize
+  call $~lib/rt/tlsf/allocateBlock
+  i32.const 16
+  i32.add
+  call $~lib/rt/pure/__retain
+  local.set $0
+  loop $while-continue|0
+   block $while-break|0
+    call $~lib/rt/tlsf/maybeInitialize
+    call $~lib/rt/tlsf/allocateBlock
+    i32.const 16
+    i32.add
+    call $~lib/rt/pure/__retain
+    local.tee $1
+    local.get $1
+    i32.const 1216
+    i32.gt_u
+    if
+     local.get $1
+     i32.const 16
+     i32.sub
+     call $~lib/rt/pure/decrement
+    end
+    if
+     local.get $2
+     i32.const 1
+     i32.add
+     local.tee $2
+     i32.const 10
+     i32.eq
+     if
+      local.get $0
+      if
+       local.get $0
+       i32.const 1216
+       i32.gt_u
+       if
+        local.get $0
+        i32.const 16
+        i32.sub
+        call $~lib/rt/pure/decrement
+       end
+      end
+      i32.const 0
+      local.set $0
+      br $while-break|0
+     end
+     br $while-continue|0
+    end
+   end
+  end
+  local.get $2
+  i32.const 10
+  i32.ne
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 171
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  local.get $0
+  if
+   i32.const 0
+   i32.const 1040
+   i32.const 172
+   i32.const 3
+   call $~lib/builtins/abort
+   unreachable
+  end
+  i32.const 1
+  global.set $while/ran
   local.get $0
   i32.const 1216
   i32.gt_u
@@ -1056,22 +1213,22 @@
   i32.const 0
   global.set $while/ran
   i32.const 10
-  local.set $1
+  local.set $0
   loop $while-continue|0
-   local.get $1
+   local.get $0
    if
-    local.get $1
+    local.get $0
     i32.const 1
     i32.sub
-    local.set $1
-    local.get $0
+    local.set $0
+    local.get $1
     i32.const 1
     i32.add
-    local.set $0
+    local.set $1
     br $while-continue|0
    end
   end
-  local.get $1
+  local.get $0
   if
    i32.const 0
    i32.const 1040
@@ -1080,7 +1237,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $1
   i32.const 10
   i32.ne
   if
@@ -1109,25 +1266,25 @@
   i32.const 0
   global.set $while/ran
   i32.const 1
-  local.set $1
+  local.set $0
   loop $while-continue|00
-   local.get $1
-   local.tee $0
+   local.get $0
+   local.tee $1
    i32.const 1
    i32.sub
-   local.set $1
-   local.get $0
+   local.set $0
+   local.get $1
    if (result i32)
-    local.get $2
+    local.get $3
     i32.const 1
     i32.add
-    local.tee $2
+    local.tee $3
    else
     i32.const 0
    end
    br_if $while-continue|00
   end
-  local.get $1
+  local.get $0
   i32.const -1
   i32.ne
   if
@@ -1138,7 +1295,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $2
+  local.get $3
   i32.const 1
   i32.ne
   if
@@ -1154,15 +1311,15 @@
   i32.const 0
   global.set $while/ran
   loop $while-continue|01
-   local.get $3
+   local.get $2
    i32.const 1
    i32.add
-   local.tee $3
+   local.tee $2
    i32.const 10
    i32.ne
    br_if $while-continue|01
   end
-  local.get $3
+  local.get $2
   i32.const 10
   i32.ne
   if
@@ -1176,17 +1333,17 @@
   i32.const 1
   global.set $while/ran
   i32.const 0
-  local.set $3
+  local.set $2
   loop $while-continue|002
-   local.get $3
+   local.get $2
    i32.const 1
    i32.add
-   local.tee $3
+   local.tee $2
    i32.const 10
    i32.ne
    br_if $while-continue|002
   end
-  local.get $3
+  local.get $2
   i32.const 10
   i32.ne
   if
@@ -1212,18 +1369,18 @@
   i32.const 0
   global.set $while/ran
   i32.const 10
-  local.set $3
+  local.set $2
   loop $while-continue|04
-   local.get $3
+   local.get $2
    if
-    local.get $3
+    local.get $2
     i32.const 1
     i32.sub
-    local.set $3
+    local.set $2
     br $while-continue|04
    end
   end
-  local.get $3
+  local.get $2
   if
    i32.const 0
    i32.const 1040
@@ -1237,30 +1394,30 @@
   i32.const 0
   global.set $while/ran
   i32.const 10
-  local.set $1
-  i32.const 10
   local.set $0
+  i32.const 10
+  local.set $1
   loop $while-continue|03
-   local.get $1
+   local.get $0
    if
     loop $while-continue|1
-     local.get $0
+     local.get $1
      if
-      local.get $0
+      local.get $1
       i32.const 1
       i32.sub
-      local.set $0
+      local.set $1
       br $while-continue|1
      end
     end
-    local.get $1
+    local.get $0
     i32.const 1
     i32.sub
-    local.set $1
+    local.set $0
     br $while-continue|03
    end
   end
-  local.get $1
+  local.get $0
   if
    i32.const 0
    i32.const 1040
@@ -1269,7 +1426,7 @@
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $0
+  local.get $1
   if
    i32.const 0
    i32.const 1040
@@ -1282,62 +1439,7 @@
   global.set $while/ran
   i32.const 0
   global.set $while/ran
-  i32.const 0
-  local.set $3
-  call $while/Ref#constructor
-  local.set $1
-  loop $while-continue|05
-   local.get $1
-   if
-    local.get $3
-    i32.const 1
-    i32.add
-    local.tee $3
-    i32.const 10
-    i32.eq
-    if
-     i32.const 0
-     local.set $0
-     local.get $1
-     if
-      local.get $1
-      call $~lib/rt/pure/__release
-     end
-    else
-     call $while/Ref#constructor
-     local.set $0
-     local.get $1
-     call $~lib/rt/pure/__release
-    end
-    local.get $0
-    local.set $1
-    br $while-continue|05
-   end
-  end
-  local.get $3
-  i32.const 10
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 151
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 152
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  global.set $while/ran
-  local.get $1
-  call $~lib/rt/pure/__release
+  call $while/testRef
   global.get $while/ran
   i32.eqz
   if
@@ -1350,61 +1452,7 @@
   end
   i32.const 0
   global.set $while/ran
-  i32.const 0
-  local.set $3
-  call $while/Ref#constructor
-  local.set $1
-  loop $while-continue|06
-   block $while-break|0
-    call $while/Ref#constructor
-    local.tee $2
-    call $~lib/rt/pure/__release
-    local.get $2
-    if
-     local.get $3
-     i32.const 1
-     i32.add
-     local.tee $3
-     i32.const 10
-     i32.eq
-     if
-      local.get $1
-      if
-       local.get $1
-       call $~lib/rt/pure/__release
-      end
-      i32.const 0
-      local.set $1
-      br $while-break|0
-     end
-     br $while-continue|06
-    end
-   end
-  end
-  local.get $3
-  i32.const 10
-  i32.ne
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 171
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  local.get $1
-  if
-   i32.const 0
-   i32.const 1040
-   i32.const 172
-   i32.const 3
-   call $~lib/builtins/abort
-   unreachable
-  end
-  i32.const 1
-  global.set $while/ran
-  local.get $1
-  call $~lib/rt/pure/__release
+  call $while/testRefAutorelease
   global.get $while/ran
   i32.eqz
   if
@@ -1418,27 +1466,27 @@
   i32.const 0
   global.set $while/ran
   i32.const 0
-  local.set $3
-  loop $while-continue|067
-   local.get $3
+  local.set $2
+  loop $while-continue|06
+   local.get $2
    i32.const 1
    i32.add
-   local.tee $3
+   local.tee $2
    i32.const 1
    i32.lt_s
-   br_if $while-continue|067
+   br_if $while-continue|06
   end
   i32.const 1
   global.set $while/ran
   i32.const 0
   global.set $while/ran
   i32.const 0
-  local.set $3
+  local.set $2
   loop $while-continue|08
-   local.get $3
+   local.get $2
    i32.const 1
    i32.add
-   local.tee $3
+   local.tee $2
    i32.const 1
    i32.lt_s
    br_if $while-continue|08
diff --git a/tests/compiler/while.untouched.wat b/tests/compiler/while.untouched.wat
index 7caedb7a8b..14e901143f 100644
--- a/tests/compiler/while.untouched.wat
+++ b/tests/compiler/while.untouched.wat
@@ -2,8 +2,8 @@
  (type $none_=>_none (func))
  (type $i32_=>_none (func (param i32)))
  (type $i32_i32_=>_none (func (param i32 i32)))
- (type $none_=>_i32 (func (result i32)))
  (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $none_=>_i32 (func (result i32)))
  (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
  (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
  (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
@@ -482,6 +482,69 @@
   i32.const 1
   global.set $while/ran
  )
+ (func $~lib/rt/tlsf/SETTAIL (param $0 i32) (param $1 i32)
+  local.get $0
+  local.get $1
+  i32.store offset=1568
+ )
+ (func $~lib/rt/tlsf/SETSL (param $0 i32) (param $1 i32) (param $2 i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $2
+  i32.store offset=4
+ )
+ (func $~lib/rt/tlsf/SETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  local.get $3
+  i32.store offset=96
+ )
+ (func $~lib/rt/tlsf/GETTAIL (param $0 i32) (result i32)
+  local.get $0
+  i32.load offset=1568
+ )
+ (func $~lib/rt/tlsf/GETRIGHT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 16
+  i32.add
+  local.get $0
+  i32.load
+  i32.const 3
+  i32.const -1
+  i32.xor
+  i32.and
+  i32.add
+ )
+ (func $~lib/rt/tlsf/GETHEAD (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 4
+  i32.shl
+  local.get $2
+  i32.add
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=96
+ )
+ (func $~lib/rt/tlsf/GETSL (param $0 i32) (param $1 i32) (result i32)
+  local.get $0
+  local.get $1
+  i32.const 2
+  i32.shl
+  i32.add
+  i32.load offset=4
+ )
  (func $~lib/rt/tlsf/removeBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -490,9 +553,6 @@
   (local $6 i32)
   (local $7 i32)
   (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   local.get $1
   i32.load
   local.set $2
@@ -505,7 +565,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 277
+   i32.const 269
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -532,7 +592,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 279
+   i32.const 271
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -586,7 +646,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 292
+   i32.const 284
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -611,77 +671,35 @@
   end
   local.get $1
   local.get $0
-  local.set $10
   local.get $4
-  local.set $9
   local.get $5
-  local.set $8
-  local.get $10
-  local.get $9
-  i32.const 4
-  i32.shl
-  local.get $8
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   i32.eq
   if
    local.get $0
-   local.set $11
    local.get $4
-   local.set $10
    local.get $5
-   local.set $9
    local.get $7
-   local.set $8
-   local.get $11
-   local.get $10
-   i32.const 4
-   i32.shl
-   local.get $9
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   local.get $8
-   i32.store offset=96
+   call $~lib/rt/tlsf/SETHEAD
    local.get $7
    i32.eqz
    if
     local.get $0
-    local.set $9
     local.get $4
+    call $~lib/rt/tlsf/GETSL
     local.set $8
-    local.get $9
-    local.get $8
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $9
     local.get $0
-    local.set $8
     local.get $4
-    local.set $11
-    local.get $9
+    local.get $8
     i32.const 1
     local.get $5
     i32.shl
     i32.const -1
     i32.xor
     i32.and
-    local.tee $9
-    local.set $10
+    local.tee $8
+    call $~lib/rt/tlsf/SETSL
     local.get $8
-    local.get $11
-    i32.const 2
-    i32.shl
-    i32.add
-    local.get $10
-    i32.store offset=4
-    local.get $9
     i32.eqz
     if
      local.get $0
@@ -698,6 +716,12 @@
    end
   end
  )
+ (func $~lib/rt/tlsf/GETFREELEFT (param $0 i32) (result i32)
+  local.get $0
+  i32.const 4
+  i32.sub
+  i32.load
+ )
  (func $~lib/rt/tlsf/insertBlock (param $0 i32) (param $1 i32)
   (local $2 i32)
   (local $3 i32)
@@ -709,8 +733,6 @@
   (local $9 i32)
   (local $10 i32)
   (local $11 i32)
-  (local $12 i32)
-  (local $13 i32)
   i32.const 1
   drop
   local.get $1
@@ -718,7 +740,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 205
+   i32.const 197
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -735,28 +757,18 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 207
+   i32.const 199
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $1
+  call $~lib/rt/tlsf/GETRIGHT
   local.set $3
   local.get $3
-  i32.const 16
-  i32.add
-  local.get $3
   i32.load
-  i32.const 3
-  i32.const -1
-  i32.xor
-  i32.and
-  i32.add
   local.set $4
   local.get $4
-  i32.load
-  local.set $5
-  local.get $5
   i32.const 1
   i32.and
   if
@@ -767,44 +779,34 @@
    i32.and
    i32.const 16
    i32.add
-   local.get $5
+   local.get $4
    i32.const 3
    i32.const -1
    i32.xor
    i32.and
    i32.add
-   local.set $3
-   local.get $3
+   local.set $5
+   local.get $5
    i32.const 1073741808
    i32.lt_u
    if
     local.get $0
-    local.get $4
+    local.get $3
     call $~lib/rt/tlsf/removeBlock
     local.get $1
     local.get $2
     i32.const 3
     i32.and
-    local.get $3
+    local.get $5
     i32.or
     local.tee $2
     i32.store
     local.get $1
-    local.set $6
-    local.get $6
-    i32.const 16
-    i32.add
-    local.get $6
+    call $~lib/rt/tlsf/GETRIGHT
+    local.set $3
+    local.get $3
     i32.load
-    i32.const 3
-    i32.const -1
-    i32.xor
-    i32.and
-    i32.add
     local.set $4
-    local.get $4
-    i32.load
-    local.set $5
    end
   end
   local.get $2
@@ -812,30 +814,26 @@
   i32.and
   if
    local.get $1
-   local.set $6
-   local.get $6
-   i32.const 4
-   i32.sub
+   call $~lib/rt/tlsf/GETFREELEFT
+   local.set $5
+   local.get $5
    i32.load
    local.set $6
-   local.get $6
-   i32.load
-   local.set $3
    i32.const 1
    drop
-   local.get $3
+   local.get $6
    i32.const 1
    i32.and
    i32.eqz
    if
     i32.const 0
     i32.const 64
-    i32.const 228
+    i32.const 220
     i32.const 16
     call $~lib/builtins/abort
     unreachable
    end
-   local.get $3
+   local.get $6
    i32.const 3
    i32.const -1
    i32.xor
@@ -854,22 +852,22 @@
    i32.lt_u
    if
     local.get $0
-    local.get $6
+    local.get $5
     call $~lib/rt/tlsf/removeBlock
+    local.get $5
     local.get $6
-    local.get $3
     i32.const 3
     i32.and
     local.get $7
     i32.or
     local.tee $2
     i32.store
-    local.get $6
+    local.get $5
     local.set $1
    end
   end
+  local.get $3
   local.get $4
-  local.get $5
   i32.const 2
   i32.or
   i32.store
@@ -895,7 +893,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 243
+   i32.const 235
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -907,18 +905,18 @@
   i32.add
   local.get $8
   i32.add
-  local.get $4
+  local.get $3
   i32.eq
   i32.eqz
   if
    i32.const 0
    i32.const 64
-   i32.const 244
+   i32.const 236
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
-  local.get $4
+  local.get $3
   i32.const 4
   i32.sub
   local.get $1
@@ -972,27 +970,15 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 260
+   i32.const 252
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $7
   local.get $9
-  local.set $3
   local.get $10
-  local.set $6
-  local.get $7
-  local.get $3
-  i32.const 4
-  i32.shl
-  local.get $6
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=96
+  call $~lib/rt/tlsf/GETHEAD
   local.set $11
   local.get $1
   i32.const 0
@@ -1007,24 +993,10 @@
    i32.store offset=16
   end
   local.get $0
-  local.set $12
   local.get $9
-  local.set $7
   local.get $10
-  local.set $3
   local.get $1
-  local.set $6
-  local.get $12
-  local.get $7
-  i32.const 4
-  i32.shl
-  local.get $3
-  i32.add
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $6
-  i32.store offset=96
+  call $~lib/rt/tlsf/SETHEAD
   local.get $0
   local.get $0
   i32.load
@@ -1034,31 +1006,15 @@
   i32.or
   i32.store
   local.get $0
-  local.set $13
   local.get $9
-  local.set $12
   local.get $0
-  local.set $3
   local.get $9
-  local.set $6
-  local.get $3
-  local.get $6
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 1
   local.get $10
   i32.shl
   i32.or
-  local.set $7
-  local.get $13
-  local.get $12
-  i32.const 2
-  i32.shl
-  i32.add
-  local.get $7
-  i32.store offset=4
+  call $~lib/rt/tlsf/SETSL
  )
  (func $~lib/rt/tlsf/addMemory (param $0 i32) (param $1 i32) (param $2 i32) (result i32)
   (local $3 i32)
@@ -1066,8 +1022,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   i32.const 1
   drop
   local.get $1
@@ -1093,24 +1047,22 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 386
+   i32.const 378
    i32.const 5
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
+  call $~lib/rt/tlsf/GETTAIL
   local.set $3
-  local.get $3
-  i32.load offset=1568
-  local.set $4
   i32.const 0
-  local.set $5
-  local.get $4
+  local.set $4
+  local.get $3
   if
    i32.const 1
    drop
    local.get $1
-   local.get $4
+   local.get $3
    i32.const 16
    i32.add
    i32.ge_u
@@ -1118,7 +1070,7 @@
    if
     i32.const 0
     i32.const 64
-    i32.const 396
+    i32.const 388
     i32.const 16
     call $~lib/builtins/abort
     unreachable
@@ -1126,16 +1078,16 @@
    local.get $1
    i32.const 16
    i32.sub
-   local.get $4
+   local.get $3
    i32.eq
    if
     local.get $1
     i32.const 16
     i32.sub
     local.set $1
-    local.get $4
+    local.get $3
     i32.load
-    local.set $5
+    local.set $4
    else
     nop
    end
@@ -1151,7 +1103,7 @@
    if
     i32.const 0
     i32.const 64
-    i32.const 408
+    i32.const 400
     i32.const 5
     call $~lib/builtins/abort
     unreachable
@@ -1160,8 +1112,8 @@
   local.get $2
   local.get $1
   i32.sub
-  local.set $6
-  local.get $6
+  local.set $5
+  local.get $5
   i32.const 16
   i32.const 16
   i32.add
@@ -1172,49 +1124,45 @@
    i32.const 0
    return
   end
-  local.get $6
+  local.get $5
   i32.const 16
   i32.const 1
   i32.shl
   i32.sub
-  local.set $7
+  local.set $6
   local.get $1
-  local.set $8
-  local.get $8
+  local.set $7
   local.get $7
+  local.get $6
   i32.const 1
   i32.or
-  local.get $5
+  local.get $4
   i32.const 2
   i32.and
   i32.or
   i32.store
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=16
-  local.get $8
+  local.get $7
   i32.const 0
   i32.store offset=20
   local.get $1
-  local.get $6
+  local.get $5
   i32.add
   i32.const 16
   i32.sub
-  local.set $4
-  local.get $4
+  local.set $3
+  local.get $3
   i32.const 0
   i32.const 2
   i32.or
   i32.store
   local.get $0
-  local.set $9
-  local.get $4
-  local.set $3
-  local.get $9
   local.get $3
-  i32.store offset=1568
+  call $~lib/rt/tlsf/SETTAIL
   local.get $0
-  local.get $8
+  local.get $7
   call $~lib/rt/tlsf/insertBlock
   i32.const 1
  )
@@ -1227,10 +1175,6 @@
   (local $5 i32)
   (local $6 i32)
   (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
-  (local $10 i32)
-  (local $11 i32)
   global.get $~lib/rt/tlsf/ROOT
   local.set $0
   local.get $0
@@ -1280,73 +1224,46 @@
    i32.const 0
    i32.store
    local.get $0
-   local.set $5
    i32.const 0
-   local.set $4
-   local.get $5
-   local.get $4
-   i32.store offset=1568
+   call $~lib/rt/tlsf/SETTAIL
    i32.const 0
-   local.set $5
+   local.set $4
    loop $for-loop|0
-    local.get $5
+    local.get $4
     i32.const 23
     i32.lt_u
-    local.set $4
-    local.get $4
+    local.set $5
+    local.get $5
     if
      local.get $0
-     local.set $8
-     local.get $5
-     local.set $7
+     local.get $4
      i32.const 0
-     local.set $6
-     local.get $8
-     local.get $7
-     i32.const 2
-     i32.shl
-     i32.add
-     local.get $6
-     i32.store offset=4
+     call $~lib/rt/tlsf/SETSL
      i32.const 0
-     local.set $8
+     local.set $6
      loop $for-loop|1
-      local.get $8
+      local.get $6
       i32.const 16
       i32.lt_u
       local.set $7
       local.get $7
       if
        local.get $0
-       local.set $11
-       local.get $5
-       local.set $10
-       local.get $8
-       local.set $9
+       local.get $4
+       local.get $6
        i32.const 0
-       local.set $6
-       local.get $11
-       local.get $10
-       i32.const 4
-       i32.shl
-       local.get $9
-       i32.add
-       i32.const 2
-       i32.shl
-       i32.add
+       call $~lib/rt/tlsf/SETHEAD
        local.get $6
-       i32.store offset=96
-       local.get $8
        i32.const 1
        i32.add
-       local.set $8
+       local.set $6
        br $for-loop|1
       end
      end
-     local.get $5
+     local.get $4
      i32.const 1
      i32.add
-     local.set $5
+     local.set $4
      br $for-loop|0
     end
    end
@@ -1359,11 +1276,11 @@
    i32.const -1
    i32.xor
    i32.and
-   local.set $5
+   local.set $4
    i32.const 0
    drop
    local.get $0
-   local.get $5
+   local.get $4
    memory.size
    i32.const 16
    i32.shl
@@ -1383,7 +1300,7 @@
   if
    i32.const 112
    i32.const 64
-   i32.const 461
+   i32.const 453
    i32.const 30
    call $~lib/builtins/abort
    unreachable
@@ -1409,9 +1326,6 @@
   (local $4 i32)
   (local $5 i32)
   (local $6 i32)
-  (local $7 i32)
-  (local $8 i32)
-  (local $9 i32)
   local.get $1
   i32.const 256
   i32.lt_u
@@ -1479,31 +1393,24 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 338
+   i32.const 330
    i32.const 14
    call $~lib/builtins/abort
    unreachable
   end
   local.get $0
-  local.set $5
   local.get $2
-  local.set $4
-  local.get $5
-  local.get $4
-  i32.const 2
-  i32.shl
-  i32.add
-  i32.load offset=4
+  call $~lib/rt/tlsf/GETSL
   i32.const 0
   i32.const -1
   i32.xor
   local.get $3
   i32.shl
   i32.and
-  local.set $6
+  local.set $5
   i32.const 0
-  local.set $7
-  local.get $6
+  local.set $6
+  local.get $5
   i32.eqz
   if
    local.get $0
@@ -1516,79 +1423,48 @@
    i32.add
    i32.shl
    i32.and
-   local.set $5
-   local.get $5
+   local.set $4
+   local.get $4
    i32.eqz
    if
     i32.const 0
-    local.set $7
+    local.set $6
    else
-    local.get $5
+    local.get $4
     i32.ctz
     local.set $2
     local.get $0
-    local.set $8
     local.get $2
-    local.set $4
-    local.get $8
-    local.get $4
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=4
-    local.set $6
+    call $~lib/rt/tlsf/GETSL
+    local.set $5
     i32.const 1
     drop
-    local.get $6
+    local.get $5
     i32.eqz
     if
      i32.const 0
      i32.const 64
-     i32.const 351
+     i32.const 343
      i32.const 18
      call $~lib/builtins/abort
      unreachable
     end
     local.get $0
-    local.set $9
     local.get $2
-    local.set $8
-    local.get $6
+    local.get $5
     i32.ctz
-    local.set $4
-    local.get $9
-    local.get $8
-    i32.const 4
-    i32.shl
-    local.get $4
-    i32.add
-    i32.const 2
-    i32.shl
-    i32.add
-    i32.load offset=96
-    local.set $7
+    call $~lib/rt/tlsf/GETHEAD
+    local.set $6
    end
   else
    local.get $0
-   local.set $9
    local.get $2
-   local.set $8
-   local.get $6
+   local.get $5
    i32.ctz
-   local.set $4
-   local.get $9
-   local.get $8
-   i32.const 4
-   i32.shl
-   local.get $4
-   i32.add
-   i32.const 2
-   i32.shl
-   i32.add
-   i32.load offset=96
-   local.set $7
+   call $~lib/rt/tlsf/GETHEAD
+   local.set $6
   end
-  local.get $7
+  local.get $6
  )
  (func $~lib/rt/tlsf/growMemory (param $0 i32) (param $1 i32)
   (local $2 i32)
@@ -1625,9 +1501,7 @@
   i32.const 16
   i32.sub
   local.get $0
-  local.set $3
-  local.get $3
-  i32.load offset=1568
+  call $~lib/rt/tlsf/GETTAIL
   i32.ne
   i32.shl
   i32.add
@@ -1641,12 +1515,12 @@
   i32.and
   i32.const 16
   i32.shr_u
-  local.set $4
+  local.set $3
   local.get $2
-  local.tee $3
-  local.get $4
-  local.tee $5
+  local.tee $4
   local.get $3
+  local.tee $5
+  local.get $4
   local.get $5
   i32.gt_s
   select
@@ -1656,7 +1530,7 @@
   i32.const 0
   i32.lt_s
   if
-   local.get $4
+   local.get $3
    memory.grow
    i32.const 0
    i32.lt_s
@@ -1693,7 +1567,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 365
+   i32.const 357
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1744,29 +1618,9 @@
    i32.and
    i32.store
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    local.get $1
-   local.set $5
-   local.get $5
-   i32.const 16
-   i32.add
-   local.get $5
-   i32.load
-   i32.const 3
-   i32.const -1
-   i32.xor
-   i32.and
-   i32.add
+   call $~lib/rt/tlsf/GETRIGHT
    i32.load
    i32.const 2
    i32.const -1
@@ -1786,7 +1640,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 501
+   i32.const 493
    i32.const 14
    call $~lib/builtins/abort
    unreachable
@@ -1833,7 +1687,7 @@
      if
       i32.const 0
       i32.const 64
-      i32.const 513
+      i32.const 505
       i32.const 20
       call $~lib/builtins/abort
       unreachable
@@ -1854,7 +1708,7 @@
     if
      i32.const 0
      i32.const 64
-     i32.const 518
+     i32.const 510
      i32.const 18
      call $~lib/builtins/abort
      unreachable
@@ -1875,7 +1729,7 @@
   if
    i32.const 0
    i32.const 64
-   i32.const 521
+   i32.const 513
    i32.const 14
    call $~lib/builtins/abort
    unreachable