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(array: T, index: i32): valueof { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.load>( @@ -12,8 +9,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function store(array: T, index: i32, value: valueof): void { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); atomic.store>( @@ -22,8 +17,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function add(array: T, index: i32, value: valueof): valueof { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.add>( @@ -32,8 +25,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function sub(array: T, index: i32, value: valueof): valueof { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.sub>( @@ -42,8 +33,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function and(array: T, index: i32, value: valueof): valueof { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.and>( @@ -52,8 +41,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function or(array: T, index: i32, value: valueof): valueof { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.or>( @@ -62,8 +49,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function xor(array: T, index: i32, value: valueof): valueof { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.xor>( @@ -72,8 +57,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function exchange(array: T, index: i32, value: valueof): valueof { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.xchg>( @@ -82,8 +65,6 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function compareExchange( array: T, index: i32, @@ -98,14 +79,10 @@ export namespace Atomics { ); } - // @ts-ignore: decorator - @inline export function wait(array: T, value: valueof, timeout: i64 = -1): AtomicWaitResult { return atomic.wait>(changetype(array.buffer) + array.byteOffset, value, timeout); } - // @ts-ignore: decorator - @inline export function notify(array: T, index: i32, count: i32 = -1): i32 { if (index < 0 || (index << alignof>()) >= array.byteLength) throw new RangeError(E_INDEXOUTOFRANGE); return atomic.notify(changetype(array.buffer) + (index << alignof>()) + 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 Date_UTC(year, month, day, hour, minute, second, millisecond); } - @inline static now(): i64 { + static now(): i64 { return 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(); /** Computes the alignment of an entry. */ // @ts-ignore: decorator -@inline function ENTRY_ALIGN(): usize { // can align to 4 instead of 8 if 32-bit and K/V is <= 32-bits const maxkv = sizeof() > sizeof() ? sizeof() : sizeof(); @@ -54,7 +53,6 @@ function ENTRY_ALIGN(): usize { /** Computes the aligned size of an entry. */ // @ts-ignore: decorator -@inline function ENTRY_SIZE(): usize { const align = ENTRY_ALIGN(); const size = (offsetof>() + 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 = 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(0x3FF921FB54400000); // 1.57079632673412561417e+00 const pio2_1t = reinterpret(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(0xBFC5555555555549); // -1.66666666666666324348e-01 const S2 = reinterpret(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(0x3FA555555555554C); // 4.16666666666666019037e-02 const C2 = reinterpret(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(x); } @@ -714,8 +701,6 @@ export namespace NativeMath { return t; } - // @ts-ignore: decorator - @inline export function ceil(x: f64): f64 { return builtin_ceil(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(x); } - // @ts-ignore: decorator - @inline export function fround(x: f64): f64 { return x; } @@ -1165,14 +1146,10 @@ export namespace NativeMath { } } - // @ts-ignore: decorator - @inline export function max(value1: f64, value2: f64): f64 { return builtin_max(value1, value2); } - // @ts-ignore: decorator - @inline export function min(value1: f64, value2: f64): f64 { return builtin_min(value1, value2); } @@ -1421,14 +1398,10 @@ export namespace NativeMath { return reinterpret(r) - 1; } - // @ts-ignore: decorator - @inline export function round(x: f64): f64 { return builtin_copysign(builtin_floor(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(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(x); } @@ -1541,8 +1510,6 @@ export namespace NativeMath { return builtin_copysign(t, x); } - // @ts-ignore: decorator - @inline export function trunc(x: f64): f64 { return builtin_trunc(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 = 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(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(0x3FF921FB50000000); // 1.57079631090164184570 const pi2lo = reinterpret(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(0xBFC5555554CBAC77); // -0x15555554cbac77.0p-55 const S2 = reinterpret(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(0xBFDFFFFFFD0C5E81); // -0x1ffffffd0c5e81.0p-54 const C1 = reinterpret(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(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(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(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(x); } @@ -2189,8 +2138,6 @@ export namespace NativeMathf { return t; } - // @ts-ignore: decorator - @inline export function ceil(x: f32): f32 { return builtin_ceil(x); } @@ -2264,8 +2211,6 @@ export namespace NativeMathf { return expo2f(x); } - // @ts-ignore: decorator - @inline export function floor(x: f32): f32 { return builtin_floor(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((x * x + 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(value1, value2); } - // @ts-ignore: decorator - @inline export function min(value1: f32, value2: f32): f32 { return builtin_min(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((r >> 9) | (127 << 23)) - 1.0; } - // @ts-ignore: decorator - @inline export function round(x: f32): f32 { return builtin_copysign(builtin_floor(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(1, x) : x; @@ -2704,8 +2635,6 @@ export namespace NativeMathf { } } - // @ts-ignore: decorator - @inline export function signbit(x: f32): bool { // @ts-ignore: type return ((reinterpret(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(x); } @@ -2841,8 +2768,6 @@ export namespace NativeMathf { return builtin_copysign(t, x); } - // @ts-ignore: decorator - @inline export function trunc(x: f32): f32 { return builtin_trunc(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(changetype(block) - sizeof()); } /** 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(changetype(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( changetype(root) + (fl << alignof()), 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( changetype(root) + (fl << alignof()), 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( changetype(root) + (((fl << SL_BITS) + sl) << alignof()), 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( changetype(root) + (((fl << SL_BITS) + sl) << alignof()), 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( changetype(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( changetype(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(); /** Computes the alignment of an entry. */ -// @ts-ignore: decorator -@inline function ENTRY_ALIGN(): usize { // can align to 4 instead of 8 if 32-bit and K is <= 32-bits const align = (sizeof() > sizeof() ? sizeof() : sizeof()) - 1; @@ -50,8 +48,6 @@ function ENTRY_ALIGN(): usize { } /** Computes the aligned size of an entry. */ -// @ts-ignore: decorator -@inline function ENTRY_SIZE(): usize { const align = ENTRY_ALIGN(); const size = (offsetof>() + 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(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( array: TArray, value: native, @@ -1434,8 +1432,6 @@ function FILL( return array; } -// @ts-ignore: decorator -@inline function SORT( array: TArray, comparator: (a: T, b: T) => i32 @@ -1456,8 +1452,6 @@ function SORT( return array; } -// @ts-ignore: decorator -@inline function SLICE( array: TArray, start: i32, @@ -1476,8 +1470,6 @@ function SLICE( return slice; } -// @ts-ignore: decorator -@inline function SUBARRAY( array: TArray, begin: i32, @@ -1495,8 +1487,6 @@ function SUBARRAY( return changetype(out); // retains } -// @ts-ignore: decorator -@inline function COPY_WITHIN( array: TArray, target: i32, @@ -1520,8 +1510,6 @@ function COPY_WITHIN( return array; } -// @ts-ignore: decorator -@inline function REDUCE( array: TArray, fn: (accumulator: TRet, value: T, index: i32, array: TArray) => TRet, @@ -1534,8 +1522,6 @@ function REDUCE( return initialValue; } -// @ts-ignore: decorator -@inline function REDUCE_RIGHT( array: TArray, fn: (accumulator: TRet, value: T, index: i32, array: TArray) => TRet, @@ -1548,8 +1534,6 @@ function REDUCE_RIGHT( return initialValue; } -// @ts-ignore: decorator -@inline function MAP( array: TArray, fn: (value: T, index: i32, self: TArray) => T, @@ -1572,8 +1556,6 @@ function MAP( return changetype(out); // retains } -// @ts-ignore: decorator -@inline function FILTER( array: TArray, fn: (value: T, index: i32, self: TArray) => bool, @@ -1601,8 +1583,6 @@ function FILTER( return changetype(out); // retains } -// @ts-ignore: decorator -@inline function FIND_INDEX( array: TArray, fn: (value: T, index: i32, array: TArray) => bool, @@ -1614,8 +1594,6 @@ function FIND_INDEX( return -1; } -// @ts-ignore: decorator -@inline function INCLUDES( array: TArray, searchElement: T, @@ -1639,8 +1617,6 @@ function INCLUDES( } } -// @ts-ignore: decorator -@inline function INDEX_OF( array: TArray, searchElement: T, @@ -1658,8 +1634,6 @@ function INDEX_OF( return -1; } -// @ts-ignore: decorator -@inline function LAST_INDEX_OF( array: TArray, searchElement: T, @@ -1678,8 +1652,6 @@ function LAST_INDEX_OF( return -1; } -// @ts-ignore: decorator -@inline function SOME( array: TArray, fn: (value: T, index: i32, array: TArray) => bool, @@ -1691,8 +1663,6 @@ function SOME( return false; } -// @ts-ignore: decorator -@inline function EVERY( array: TArray, fn: (value: T, index: i32, array: TArray) => bool, @@ -1705,8 +1675,6 @@ function EVERY( return true; } -// @ts-ignore: decorator -@inline function FOREACH( array: TArray, fn: (value: T, index: i32, array: TArray) => void, @@ -1717,8 +1685,6 @@ function FOREACH( } } -// @ts-ignore: decorator -@inline function REVERSE(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(array: TArray): TArray { return array; } -// @ts-ignore: decorator -@inline function WRAP(buffer: ArrayBuffer, byteOffset: i32 = 0, length: i32 = -1): TArray { var byteLength: i32; var bufferByteLength = buffer.byteLength; @@ -1762,8 +1726,6 @@ function WRAP(buffer: ArrayBuffer, byteOffset return changetype(out); // retains } -// @ts-ignore: decorator -@inline function SET(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()) { 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([ ]); // 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(key: T): u32 { if (isString()) { return hashStr(changetype(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([ // 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([ // 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([ // 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 >= (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 y; } -// @ts-ignore: decorator -@inline function xflowf(sign: u32, y: f32): f32 { return select(-y, y, sign) * y; } -// @ts-ignore: decorator -@inline function oflowf(sign: u32): f32 { return xflowf(sign, reinterpret(0x70000000)); // 0x1p97f } -// @ts-ignore: decorator -@inline function uflowf(sign: u32): f32 { return xflowf(sign, reinterpret(0x10000000)); // 0x1p-95f } -// @ts-ignore: decorator -@inline export function powf_lut(x: f32, y: f32): f32 { const Ox1p23f = reinterpret(0x4B000000), // 0x1p23f @@ -604,8 +580,6 @@ const EXP_DATA_TAB = memory.data([ // 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(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(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([ reinterpret(0x3FF5DFFFEBFC3481), reinterpret(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([ reinterpret(0x3FF5EFFFE7B87A89), reinterpret(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([ // 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(0x1000000000000000)); // 0x1p-767 } -// @ts-ignore: decorator -@inline function oflow(sign: u32): f64 { return xflow(sign, reinterpret(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(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(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(lastp); @@ -404,8 +392,6 @@ function grisuRound(buffer: usize, len: i32, delta: u64, rest: u64, ten_kappa: u store(lastp, digit); } -// @ts-ignore: decorator -@inline function getCachedPower(minExp: i32): void { const c = reinterpret(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(EXP_POWERS + (index << alignof())); } -// @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(): (a: T, b: T) => i32 { if (isInteger()) { if (isSigned() && sizeof() <= 4) { @@ -42,8 +40,6 @@ export function COMPARATOR(): (a: T, b: T) => i32 { } } -// @ts-ignore: decorator -@inline export function SORT( 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 = load(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(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(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 = load(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(POWERS10 + (n << alignof())); 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#__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#__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\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\9a\ec\ef?\d1f\87\10z^\90\bc\85\7fn\e8\15\e3\ef?\13\f6g5R\d2\8c\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\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\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\96Z~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\90T\'\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\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#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 (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 + 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 - 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 - 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 (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 - 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 + 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 (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 + 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 - 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 - 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 ) - (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 (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 - 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 - 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 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 (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 - 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 - 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 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#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>#__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>#__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>#__get i32.const 1 call $~lib/array/Array<~lib/array/Array>#__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~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR~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~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $start:std/array~anonymous|44 $~lib/util/sort/COMPARATOR~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#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 (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#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#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#indexOf - i32.const 0 - i32.ge_s - ) (func $~lib/array/Array#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#__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#__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#__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#__unchecked_get + i32.const 2 + i32.shl + i32.add + i32.load + call $~lib/rt/pure/__retain ) (func $~lib/array/Array#__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#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#__get - local.get $0 + local.get $3 local.get $2 call $~lib/array/Array#__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>#__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> (param $0 i32) (param $1 i32) + (func $std/array/isSorted<~lib/array/Array> (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> (result i32) - i32.const 1 - local.set $2 - local.get $0 - local.get $1 - call $~lib/array/Array<~lib/array/Array>#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#__get + local.tee $3 + local.get $0 + local.get $2 + call $~lib/array/Array#__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#__get - local.tee $0 - local.get $4 - local.get $2 - call $~lib/array/Array#__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.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> (param $0 i32) (param $1 i32) + local.get $0 + local.get $1 + call $~lib/array/Array<~lib/array/Array>#sort + local.tee $0 + local.get $1 + call $std/array/isSorted<~lib/array/Array> 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>#__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#__get + local.tee $2 + local.get $0 + local.get $1 + call $~lib/array/Array#__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#__get + local.tee $3 + local.get $1 + local.get $2 + call $~lib/array/Array#__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 (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 - 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 (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 + call $~lib/util/number/utoa32_core local.get $0 ) (func $~lib/util/string/joinIntegerArray (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#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 - ) (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 local.get $2 + call $~lib/util/number/utoa32_core + local.get $1 call $~lib/rt/pure/__retain ) (func $~lib/util/number/itoa_stream (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 + call $~lib/util/number/utoa32_core local.get $0 ) (func $~lib/util/string/joinIntegerArray (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#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 + 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 - 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 - 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 (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 (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 (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#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 - ) (func $~lib/util/number/itoa_stream (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 + call $~lib/util/number/utoa32_core local.get $1 ) (func $~lib/util/string/joinIntegerArray (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 + call $~lib/util/number/utoa32_core local.get $1 ) (func $~lib/util/string/joinIntegerArray (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 (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 + 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 + 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 + 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 + 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 (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 (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 + 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 + call $~lib/util/number/utoa64_core end local.get $0 ) (func $~lib/util/string/joinIntegerArray (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 - 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 - 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#join + call $~lib/util/string/joinIntegerArray 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#join + call $~lib/util/string/joinIntegerArray 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#join - local.tee $0 + call $~lib/util/string/joinIntegerArray + 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 (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 + call $~lib/util/number/utoa32_core local.get $1 ) (func $~lib/util/string/joinIntegerArray (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#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 - ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array> (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#toString + i32.load offset=4 + local.get $4 + i32.load offset=12 + call $~lib/util/string/joinIntegerArray 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 + local.tee $2 + local.set $7 local.get $1 local.get $1 - local.get $3 - call $~lib/array/Array#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 + local.tee $3 + local.set $0 local.get $1 + i32.const 6176 local.get $1 - local.get $2 - call $~lib/array/Array#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> (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#join + call $~lib/util/string/joinIntegerArray 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#join + call $~lib/util/string/joinIntegerArray 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#join - local.tee $0 + call $~lib/util/string/joinIntegerArray + 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>#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> - ) (func $~lib/util/string/joinReferenceArray<~lib/array/Array<~lib/array/Array>> (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>#toString + i32.load offset=4 + local.get $4 + i32.load offset=12 + call $~lib/util/string/joinReferenceArray<~lib/array/Array> 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> + local.tee $2 + local.set $7 local.get $1 local.get $1 - local.get $3 - call $~lib/array/Array<~lib/array/Array>#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> + 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>#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>#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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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 - 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.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.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.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.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.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#constructor - local.set $1 + local.set $60 global.get $std/array/arr - local.get $1 + local.get $60 call $~lib/array/Array#concat - local.set $2 + local.set $61 global.get $std/array/arr - call $std/array/internalCapacity + 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#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.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#__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#__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#__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#push - local.get $1 + local.get $60 i32.const 47 call $~lib/array/Array#push global.get $std/array/arr - local.get $1 + local.get $60 call $~lib/array/Array#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.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#__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#__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#__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#__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#__get i32.const 47 @@ -10477,10 +11778,10 @@ call $~lib/builtins/abort unreachable end - local.get $0 + local.get $58 call $~lib/array/Array#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#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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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 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#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.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#__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#__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#__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#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#__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#__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#__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.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.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.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.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#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#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#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#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#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#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#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#includes + call $~lib/array/Array#indexOf + i32.const 0 + i32.ge_s i32.const 1 i32.ne if @@ -11896,7 +13554,7 @@ end block $__inlined_func$~lib/array/Array#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#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#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#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#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#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#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.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#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 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 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#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 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 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#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 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 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#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 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 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#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 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 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#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 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 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#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 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 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#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 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 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#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 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 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 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 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#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 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 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#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 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 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#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 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 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#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 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 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#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#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#__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#__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#__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#__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#__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#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#__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#__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#__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#__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#__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#__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#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#__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#__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#__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#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#__get global.get $std/array/arr @@ -13744,7 +15889,15 @@ global.get $std/array/arr i32.const 23 call $~lib/array/Array#map - 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#map - 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#map - 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#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#filter @@ -13854,7 +16030,15 @@ global.get $std/array/arr i32.const 27 call $~lib/array/Array#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#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#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#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#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~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#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~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 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 (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 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#__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#__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#__get - local.get $7 + local.get $44 local.get $1 call $~lib/array/Array#__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#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~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#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~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 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 (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 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#__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#__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#__get - local.get $2 - local.get $1 + local.get $55 + local.get $59 call $~lib/array/Array#__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#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 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#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 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 - local.get $1 - i32.const 48 + local.get $52 + i32.const 46 call $std/array/assertSorted - 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 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 - 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 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 - local.get $6 - local.get $0 + local.get $49 + local.get $51 i32.const 0 call $std/array/isArraysEqual 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 - local.get $8 - local.get $0 + local.get $48 + local.get $51 i32.const 4 call $std/array/isArraysEqual 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 - local.get $9 - local.get $0 + local.get $47 + local.get $51 i32.const 4 call $std/array/isArraysEqual 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 - local.get $11 - local.get $0 + local.get $46 + local.get $51 i32.const 4 call $std/array/isArraysEqual 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 - local.get $13 - local.get $0 + local.get $45 + local.get $51 i32.const 4 call $std/array/isArraysEqual 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 - 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 local.get $0 - i32.const 50 + i32.const 49 call $std/array/assertSorted local.get $1 - i32.const 51 + i32.const 50 call $std/array/assertSorted local.get $1 - i32.const 52 + i32.const 51 call $std/array/assertSorted 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> - 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> - 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>#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#__get - local.tee $3 - local.get $2 - local.get $1 - call $~lib/array/Array#__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>#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#__get - local.tee $0 - local.get $7 - local.get $1 - call $~lib/array/Array#__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>#__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> - 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#join - local.tee $7 + call $~lib/util/string/joinIntegerArray + 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#join - local.tee $8 + call $~lib/util/string/joinIntegerArray + 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#join - local.tee $11 + call $~lib/util/string/joinIntegerArray + 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 - 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#join - local.tee $19 + local.get $55 + i32.load offset=4 + local.get $55 + i32.load offset=12 + call $~lib/util/string/joinReferenceArray + 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#join - local.tee $12 + local.get $52 + i32.load offset=4 + local.get $52 + i32.load offset=12 + call $~lib/util/string/joinReferenceArray + 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#join - local.tee $0 - local.get $0 + call $~lib/util/string/joinIntegerArray + 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#join - local.tee $0 - local.set $17 - local.get $0 + call $~lib/util/string/joinIntegerArray + 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#join - local.tee $0 - local.set $18 - local.get $0 + call $~lib/util/string/joinIntegerArray + 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#join - local.tee $0 - local.set $19 - local.get $0 + call $~lib/util/string/joinIntegerArray + 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 - 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 - 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 - 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 - 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> - 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> - 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>> - 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>> + 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>#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#__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#__get - local.tee $8 - local.get $4 - local.get $10 + local.tee $0 + local.get $58 + local.get $35 call $~lib/array/Array#__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>#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~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~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~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~anonymous|0 $~lib/util/sort/COMPARATOR~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#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#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 (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 + else + local.get $0 + local.get $1 + local.get $2 + call $~lib/util/sort/weakHeapSort + end + ) (func $~lib/array/Array#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 - else - local.get $8 - local.get $7 - local.get $6 - call $~lib/util/sort/weakHeapSort - end + call $~lib/util/sort/SORT local.get $0 call $~lib/rt/pure/__retain ) @@ -7679,6 +7515,18 @@ i32.lt_s i32.sub ) + (func $~lib/util/sort/COMPARATOR (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#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|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|inlined.0 - end + call $~lib/util/sort/COMPARATOR local.set $1 end local.get $0 @@ -8194,14 +8031,29 @@ local.get $12 f64.store ) + (func $~lib/util/sort/SORT (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 + else + local.get $0 + local.get $1 + local.get $2 + call $~lib/util/sort/weakHeapSort + end + ) (func $~lib/array/Array#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 - else - local.get $8 - local.get $7 - local.get $6 - call $~lib/util/sort/weakHeapSort - end + call $~lib/util/sort/SORT local.get $0 call $~lib/rt/pure/__retain ) @@ -8304,6 +8138,18 @@ i64.lt_s i32.sub ) + (func $~lib/util/sort/COMPARATOR (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#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|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|inlined.0 - end + call $~lib/util/sort/COMPARATOR local.set $1 end local.get $0 @@ -8854,12 +8689,29 @@ local.get $12 i32.store ) + (func $~lib/util/sort/SORT (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 + else + local.get $0 + local.get $1 + local.get $2 + call $~lib/util/sort/weakHeapSort + end + ) (func $~lib/array/Array#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 - else - local.get $6 - local.get $5 - local.get $4 - call $~lib/util/sort/weakHeapSort - end + call $~lib/util/sort/SORT local.get $0 call $~lib/rt/pure/__retain ) @@ -8934,6 +8768,21 @@ local.get $1 i32.sub ) + (func $~lib/util/sort/COMPARATOR (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#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|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|inlined.0 - end + call $~lib/util/sort/COMPARATOR local.set $1 end local.get $0 @@ -9343,12 +9178,29 @@ local.get $12 i32.store ) + (func $~lib/util/sort/SORT (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 + else + local.get $0 + local.get $1 + local.get $2 + call $~lib/util/sort/weakHeapSort + end + ) (func $~lib/array/Array#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 - else - local.get $6 - local.get $5 - local.get $4 - call $~lib/util/sort/weakHeapSort - end + call $~lib/util/sort/SORT local.get $0 call $~lib/rt/pure/__retain ) @@ -9427,6 +9261,21 @@ i32.lt_u i32.sub ) + (func $~lib/util/sort/COMPARATOR (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#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|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|inlined.0 - end + call $~lib/util/sort/COMPARATOR local.set $1 end local.get $0 @@ -9577,11 +9412,6 @@ end local.get $1 ) - (func $~lib/util/sort/COMPARATOR~anonymous|1 (param $0 i32) (param $1 i32) (result i32) - local.get $0 - local.get $1 - i32.sub - ) (func $std/array/isSorted (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|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|inlined.1 - end + call $~lib/util/sort/COMPARATOR call $std/array/assertSorted local.get $0 call $~lib/rt/pure/__release @@ -10024,6 +9840,14 @@ end end ) + (func $~lib/util/sort/SORT<~lib/array/Array> (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> + ) (func $~lib/array/Array<~lib/array/Array>#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> + call $~lib/util/sort/SORT<~lib/array/Array> local.get $0 call $~lib/rt/pure/__retain ) @@ -10566,6 +10382,14 @@ end end ) + (func $~lib/util/sort/SORT> (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> + ) (func $~lib/array/Array>#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> + call $~lib/util/sort/SORT> 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 (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 (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 (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 (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 (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 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -16128,9 +15655,6 @@ (func $~lib/util/number/itoa_stream (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 (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 (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 (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 local.get $31 - i32.const 50 + i32.const 49 call $std/array/assertSorted local.get $29 - i32.const 51 + i32.const 50 call $std/array/assertSorted local.get $29 - i32.const 52 + i32.const 51 call $std/array/assertSorted 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> 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> 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 (param $0 i32) (result i32) local.get $0 i32.const -16711936 @@ -1523,17 +1512,6 @@ i32.add i32.load8_u ) - (func $~lib/polyfills/bswap (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 - 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 + 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 (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 (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|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|inlined.0 - end + f32.const 0 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.1 - end + f32.const 1 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.2 - end + f32.const 1.100000023841858 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.3 - end + f32.const 0 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.4 - end + f32.const inf + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.5 - end + f32.const nan:0x400000 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.0 - end + f64.const 0 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.1 - end + f64.const 1 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.2 - end + f64.const 1.1 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.3 - end + f64.const 0 + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.4 - end + f64.const inf + call $~lib/util/hash/HASH call $std/hash/check drop - block $~lib/util/hash/HASH|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|inlined.5 - end + f64.const nan:0x8000000000000 + call $~lib/util/hash/HASH 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#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#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/map/Map#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#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#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#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#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#__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#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#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#__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#set:length + i32.load offset=4 + local.get $1 + i32.add + local.get $2 + i32.store8 + ) + (func $~lib/array/Array#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#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#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#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#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#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#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#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#find if i32.const 0 i32.const 1312 @@ -3145,10 +3240,27 @@ i32.const 10 i32.add call $~lib/map/Map#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#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#find i32.eqz if i32.const 0 @@ -3209,7 +3321,16 @@ if local.get $0 local.get $1 - call $~lib/map/Map#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#find i32.eqz if i32.const 0 @@ -3248,10 +3369,27 @@ i32.const 20 i32.add call $~lib/map/Map#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#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#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#keys + i32.load offset=8 local.set $4 local.get $0 + i32.load offset=16 + local.tee $6 + call $~lib/array/Array#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#__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#set:length + local.get $0 call $~lib/map/Map#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#clear call $~lib/map/Map#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#__get local.set $7 local.get $0 - local.get $3 - call $~lib/map/Map#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#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#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#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#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#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#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#find i32.eqz if i32.const 0 @@ -3476,7 +3706,16 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#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#find if i32.const 0 i32.const 1312 @@ -3517,7 +3756,16 @@ if local.get $0 local.get $2 - call $~lib/map/Map#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#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#set - call $~lib/rt/pure/__release - local.get $0 - local.get $2 - call $~lib/map/Map#has + i32.const 10 + i32.add + call $~lib/map/Map#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#find i32.eqz if i32.const 0 @@ -3554,7 +3819,16 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#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#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#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#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#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#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#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#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#keys (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + local.get $3 ) (func $~lib/map/Map#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#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#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#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -4362,10 +4708,25 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -4422,7 +4783,14 @@ if local.get $0 local.get $1 - call $~lib/map/Map#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -4457,10 +4825,25 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -4506,46 +4889,92 @@ call $~lib/builtins/abort unreachable end - local.get $0 - call $~lib/map/Map#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#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#__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#set:length local.get $0 call $~lib/map/Map#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#clear call $~lib/map/Map#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#__get local.set $7 local.get $0 - local.get $3 - call $~lib/map/Map#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#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#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#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#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#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#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -4679,7 +5148,14 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -4718,7 +5194,14 @@ if local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -4735,10 +5218,25 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -4753,7 +5251,14 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/map/Map#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#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#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#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#__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#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#__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#set:length - local.get $0 - ) (func $~lib/map/Map#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#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#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#has @@ -5791,7 +6360,15 @@ i32.const 20 i32.add call $~lib/map/Map#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#has @@ -5842,15 +6419,61 @@ call $~lib/builtins/abort unreachable end + i32.const 0 + local.set $3 local.get $0 - call $~lib/map/Map#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#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#__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#set:length local.get $0 call $~lib/map/Map#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#__get local.set $7 local.get $0 - local.get $1 + local.get $4 call $~lib/map/Map#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#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#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#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#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#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#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#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#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#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#keys (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + local.get $3 ) (func $~lib/map/Map#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#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#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -6912,10 +7609,22 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -6972,7 +7681,11 @@ if local.get $0 local.get $1 - call $~lib/map/Map#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7007,10 +7720,22 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#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#keys + i32.load offset=8 local.set $4 local.get $0 + i32.load offset=16 + local.tee $6 + call $~lib/array/Array#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#__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#set:length + local.get $0 call $~lib/map/Map#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#__get local.set $7 local.get $0 - local.get $1 - call $~lib/map/Map#has + local.get $4 + local.get $4 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7134,7 +7909,12 @@ local.get $7 i32.const 20 i32.sub - call $~lib/map/Map#has + local.tee $8 + local.get $8 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#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#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#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#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7231,7 +8031,11 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -7270,7 +8074,11 @@ if local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -7287,10 +8095,22 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7305,7 +8125,11 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/map/Map#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#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#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#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#constructor local.set $0 loop $for-loop|0 @@ -7461,7 +8312,9 @@ if local.get $0 local.get $1 - call $~lib/map/Map#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -7476,10 +8329,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7532,7 +8395,9 @@ if local.get $0 local.get $1 - call $~lib/map/Map#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7563,10 +8428,20 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#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#constructor local.set $3 call $~lib/map/Map#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#__get - local.set $5 + local.set $4 local.get $6 local.get $2 call $~lib/array/Array#__get local.set $7 local.get $0 - local.get $5 - call $~lib/map/Map#has + local.get $4 + local.get $4 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7691,7 +8570,10 @@ local.get $7 i32.const 20 i32.sub - call $~lib/map/Map#has + local.tee $8 + local.get $8 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#set - call $~lib/rt/pure/__release local.get $4 + local.get $4 + call $~lib/map/Map#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#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7784,7 +8684,9 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -7821,7 +8723,9 @@ if local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -7836,10 +8740,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -7854,7 +8768,9 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#keys (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + local.get $3 ) (func $std/map/testNumeric (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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -8077,10 +9000,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -8133,7 +9066,9 @@ if local.get $0 local.get $1 - call $~lib/map/Map#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -8164,10 +9099,20 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#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#__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#keys - local.set $4 + local.get $1 + local.get $3 + call $~lib/array/Array#set:length local.get $0 call $~lib/map/Map#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#clear call $~lib/map/Map#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#__get - local.set $3 + local.set $4 local.get $6 local.get $2 call $~lib/array/Array#__get local.set $7 local.get $0 - local.get $3 - call $~lib/map/Map#has + local.get $4 + local.get $4 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -8273,7 +9266,10 @@ local.get $7 i32.const 20 i32.sub - call $~lib/map/Map#has + local.tee $8 + local.get $8 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#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#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -8366,7 +9380,9 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -8403,7 +9419,9 @@ if local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -8418,10 +9436,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -8436,7 +9464,9 @@ call $~lib/map/Map#delete local.get $0 local.get $2 - call $~lib/map/Map#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/map/Map#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#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#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#__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#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#__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#set:length - local.get $0 - ) (func $~lib/map/Map#values (param $0 i32) (result i32) (local $1 i32) (local $2 i32) @@ -9101,12 +10165,21 @@ ) (func $~lib/map/Map#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#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -9530,10 +10643,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -9587,7 +10710,9 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -9620,10 +10745,20 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -9669,14 +10804,58 @@ unreachable end local.get $1 - call $~lib/map/Map#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#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#__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#set:length local.get $1 call $~lib/map/Map#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#clear call $~lib/map/Map#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#__get local.set $0 local.get $7 - local.get $3 + local.get $6 call $~lib/array/Array#__get - local.set $4 + local.set $5 local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#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#has + local.tee $9 + local.get $9 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -9745,19 +10929,35 @@ local.get $0 local.get $0 call $~lib/map/Map#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#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -9825,7 +11027,9 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -9862,7 +11066,9 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -9878,10 +11084,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -9896,7 +11112,9 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#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#keys (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + local.get $3 ) (func $std/map/testNumeric (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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -10120,10 +11346,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -10177,7 +11413,9 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -10210,10 +11448,20 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -10259,14 +11507,58 @@ unreachable end local.get $1 - call $~lib/map/Map#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#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#__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#set:length local.get $1 call $~lib/map/Map#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#clear call $~lib/map/Map#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#__get local.set $0 local.get $7 - local.get $3 + local.get $6 call $~lib/array/Array#__get - local.set $4 + local.set $5 local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#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#has + local.tee $9 + local.get $9 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -10335,19 +11632,35 @@ local.get $0 local.get $0 call $~lib/map/Map#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#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -10415,7 +11730,9 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -10452,7 +11769,9 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -10468,10 +11787,20 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -10486,7 +11815,9 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -10515,27 +11846,62 @@ unreachable end local.get $1 - call $~lib/map/Map#clear - local.get $1 - i32.load offset=20 + call $~lib/map/Map#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/map/Map#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#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#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#keys (param $0 i32) (result i32) + (func $~lib/array/Array#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#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#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#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#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#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -11330,10 +12766,21 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -11387,7 +12834,10 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -11420,10 +12870,21 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -11470,13 +12931,16 @@ end local.get $1 call $~lib/map/Map#keys - local.set $4 + local.set $5 local.get $1 call $~lib/map/Map#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#__get - local.set $5 + local.set $4 local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#has + local.tee $8 + local.get $8 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -11561,15 +13032,31 @@ local.get $0 local.get $0 call $~lib/map/Map#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#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -11641,7 +13131,10 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -11678,7 +13171,10 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -11694,10 +13190,21 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -11712,7 +13219,10 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#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#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/map/Map#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#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#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#keys (param $0 i32) (result i32) + (func $~lib/array/Array#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#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#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#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#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -12592,10 +14205,21 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -12649,7 +14273,10 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -12682,10 +14309,21 @@ i32.const 20 i32.add call $~lib/map/Map#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -12732,13 +14370,16 @@ end local.get $1 call $~lib/map/Map#keys - local.set $4 + local.set $5 local.get $1 call $~lib/map/Map#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#__get - local.set $5 + local.set $4 local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#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#has + local.tee $8 + local.get $8 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -12823,15 +14471,31 @@ local.get $0 local.get $0 call $~lib/map/Map#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#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -12903,7 +14570,10 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -12940,7 +14610,10 @@ if local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find if i32.const 0 i32.const 1312 @@ -12956,10 +14629,21 @@ i32.const 10 i32.add call $~lib/map/Map#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#find i32.eqz if i32.const 0 @@ -12974,7 +14658,10 @@ call $~lib/map/Map#delete local.get $1 local.get $0 - call $~lib/map/Map#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/map/Map#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 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 (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + i32.load8_s + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -4212,9 +4016,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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.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 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 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|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|inlined.5 - end + local.get $10 + i32.load8_s + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/map/ENTRY_SIZE 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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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 (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#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.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.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|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|inlined.1 - end + local.get $10 + i32.load + call $~lib/util/hash/HASH 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.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.0 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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.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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -5759,9 +5533,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + i32.load8_u + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|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#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 call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -6508,9 +6254,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + i32.load8_u + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/map/ENTRY_SIZE 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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -7530,9 +7250,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + i32.load16_s + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -8325,9 +8001,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + i32.load16_s + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/map/ENTRY_SIZE 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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -9387,9 +9021,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|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|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#has (param $0 i32) (param $1 i32) (result i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + i32.load16_u + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -10152,9 +9746,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + i32.load16_u + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/map/ENTRY_SIZE 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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -11187,81 +10743,33 @@ call $~lib/rt/pure/__release ) (func $~lib/map/Map#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 - local.get $1 - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $1 + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#find i32.const 0 i32.ne ) (func $~lib/map/Map#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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.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.mul i32.add local.set $7 @@ -11405,34 +10913,11 @@ (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.4 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -11955,9 +11440,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + i32.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -12728,9 +12165,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + i32.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -13744,9 +13135,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 (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#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#has (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + i64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 16 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -14623,9 +13952,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + i64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 24 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 (result i32) + i32.const 7 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + i64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 16 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -16453,9 +15659,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + i64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 24 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -17492,9 +16637,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 f32) (result i32) - (local $2 f32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + f32.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -18239,9 +17355,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + f32.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#rehash end i32.const 1 @@ -19245,9 +18333,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 f64) (result i32) - (local $2 f64) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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 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 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|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|inlined.2 - end + local.get $10 + f64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 16 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.1 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 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 i32.mul i32.add local.set $7 @@ -20008,9 +19055,28 @@ call $~lib/array/Array#set:length local.get $3 ) + (func $~lib/map/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 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 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|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|inlined.5 - end + local.get $10 + f64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 24 + call $~lib/map/ENTRY_SIZE 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#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|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|inlined.4 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#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|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|inlined.6 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#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 - ) - (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 + 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 @@ -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 + 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 - ) (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 - ) - (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 @@ -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 + 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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) (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 - ) - (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 - ) (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 - ) (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 - ) (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 - if (result i32) - local.get $0 - call $~lib/bindings/Math/sin - local.get $1 - local.get $2 - call $std/math/check - 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 + if (result i32) + local.get $0 + call $~lib/bindings/Math/sin + local.get $1 + local.get $2 + call $std/math/check + 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 @@ -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 - ) (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 - ) (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 @@ -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 - ) (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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 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 ) - (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 - 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 + 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 + 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 + 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 ) - (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 + ) + (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 + 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 - 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 + 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 - 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 + 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 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 ) - (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 ) - (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 ) - (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 ) - (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 ) - (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 ) - (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 + 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 + 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 - 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 - 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 ) - (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 ) - (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 ) - (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 + 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 + 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 - 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 - 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 ) - (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 (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 - 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 - 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 - 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#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#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#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#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/set/Set#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#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#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#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#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#__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#set:length - local.get $0 - ) (func $~lib/array/Array#__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#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#constructor local.set $0 loop $for-loop|1 @@ -2291,7 +2287,16 @@ if local.get $0 local.get $2 - call $~lib/set/Set#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#find if i32.const 0 i32.const 1312 @@ -2303,10 +2308,27 @@ local.get $0 local.get $2 call $~lib/set/Set#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#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#find i32.eqz if i32.const 0 @@ -2348,7 +2370,16 @@ if local.get $0 local.get $2 - call $~lib/set/Set#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#find i32.eqz if i32.const 0 @@ -2361,10 +2392,27 @@ local.get $0 local.get $2 call $~lib/set/Set#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#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#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#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#__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#values - local.set $2 + local.get $2 + local.get $3 + call $~lib/array/Array#set:length call $~lib/set/Set#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#__get - call $~lib/set/Set#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#find i32.eqz if i32.const 0 @@ -2423,7 +2526,15 @@ local.get $1 call $~lib/array/Array#__get call $~lib/set/Set#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#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#find i32.eqz if i32.const 0 @@ -2472,7 +2592,16 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#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#find if i32.const 0 i32.const 1312 @@ -2513,7 +2642,16 @@ if local.get $0 local.get $1 - call $~lib/set/Set#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#find if i32.const 0 i32.const 1312 @@ -2525,10 +2663,27 @@ local.get $0 local.get $1 call $~lib/set/Set#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#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#find i32.eqz if i32.const 0 @@ -2543,7 +2698,16 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#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#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#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#clear local.get $0 ) - (func $~lib/set/Set#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#find - i32.const 0 - i32.ne - ) (func $~lib/set/Set#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#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#find i32.eqz if @@ -2845,22 +3054,12 @@ local.get $0 call $~lib/rt/pure/__retain ) - (func $~lib/set/Set#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + local.get $3 ) (func $~lib/array/Array#__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#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#constructor local.set $0 loop $for-loop|1 @@ -3053,7 +3236,14 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -3065,10 +3255,25 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -3108,7 +3313,14 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -3121,10 +3333,25 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#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#values + i32.load offset=16 + local.tee $6 + call $~lib/array/Array#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#__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#set:length call $~lib/set/Set#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#__get - call $~lib/set/Set#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#find i32.eqz if i32.const 0 @@ -3183,7 +3463,15 @@ local.get $1 call $~lib/array/Array#__get call $~lib/set/Set#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#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -3230,7 +3525,14 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -3269,7 +3571,14 @@ if local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -3281,10 +3590,25 @@ local.get $0 local.get $1 call $~lib/set/Set#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#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -3299,7 +3623,14 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + i32.const 255 + i32.and + i32.const -2128831035 + i32.xor + i32.const 16777619 + i32.mul + call $~lib/set/Set#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#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#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#find i32.eqz if @@ -3663,74 +4045,13 @@ local.get $0 call $~lib/rt/pure/__retain ) - (func $~lib/array/Array#__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#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#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#__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#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#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#__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#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#has if i32.const 0 @@ -3942,11 +4294,19 @@ unreachable end local.get $0 - local.get $2 + local.get $1 call $~lib/set/Set#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#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#has i32.eqz if @@ -4000,11 +4360,19 @@ unreachable end local.get $0 - local.get $2 + local.get $1 call $~lib/set/Set#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#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#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#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#__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#set:length call $~lib/set/Set#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#__get call $~lib/set/Set#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#__get call $~lib/set/Set#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#has i32.eqz if @@ -4109,10 +4528,10 @@ unreachable end local.get $0 - local.get $1 + local.get $2 call $~lib/set/Set#delete local.get $0 - local.get $1 + local.get $2 call $~lib/set/Set#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#has if i32.const 0 @@ -4164,11 +4583,19 @@ unreachable end local.get $0 - local.get $1 + local.get $2 call $~lib/set/Set#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#has i32.eqz if @@ -4180,10 +4607,10 @@ unreachable end local.get $0 - local.get $1 + local.get $2 call $~lib/set/Set#delete local.get $0 - local.get $1 + local.get $2 call $~lib/set/Set#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#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#clear local.get $0 ) - (func $~lib/set/Set#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#find - i32.const 0 - i32.ne - ) (func $~lib/set/Set#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#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#find i32.eqz if @@ -4486,24 +4953,13 @@ local.get $0 call $~lib/rt/pure/__retain ) - (func $~lib/set/Set#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + local.get $3 ) (func $~lib/array/Array#__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#constructor local.set $0 loop $for-loop|1 @@ -4701,7 +5138,11 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -4713,10 +5154,22 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -4756,7 +5209,11 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -4769,41 +5226,96 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#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#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#__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#values - local.set $2 + local.get $2 + local.get $3 + call $~lib/array/Array#set:length call $~lib/set/Set#constructor local.set $3 loop $for-loop|4 @@ -4816,7 +5328,12 @@ local.get $2 local.get $1 call $~lib/array/Array#__get - call $~lib/set/Set#has + local.tee $4 + local.get $4 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -4831,7 +5348,15 @@ local.get $1 call $~lib/array/Array#__get call $~lib/set/Set#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#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -4878,7 +5407,11 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -4917,7 +5450,11 @@ if local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -4929,10 +5466,22 @@ local.get $0 local.get $1 call $~lib/set/Set#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#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -4947,7 +5496,11 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + i32.const 65535 + i32.and + call $~lib/util/hash/hash16 + call $~lib/set/Set#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/set/Set#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#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#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#__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#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#__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#set:length - local.get $0 - ) (func $~lib/array/Array#__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#constructor local.set $0 loop $for-loop|0 @@ -5578,7 +6141,9 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -5590,10 +6155,20 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -5631,7 +6206,9 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -5644,10 +6221,20 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#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#values + i32.load offset=16 + local.tee $6 + call $~lib/array/Array#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#__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#set:length call $~lib/set/Set#constructor local.set $3 loop $for-loop|2 @@ -5691,7 +6321,10 @@ local.get $2 local.get $1 call $~lib/array/Array#__get - call $~lib/set/Set#has + local.tee $4 + local.get $4 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -5706,7 +6339,15 @@ local.get $1 call $~lib/array/Array#__get call $~lib/set/Set#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -5751,7 +6394,9 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -5788,7 +6433,9 @@ if local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -5800,10 +6447,20 @@ local.get $0 local.get $1 call $~lib/set/Set#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -5818,7 +6475,9 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#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#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#clear local.get $0 ) - (func $~lib/set/Set#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + local.get $3 ) (func $std/set/testNumeric (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#constructor local.set $0 loop $for-loop|0 @@ -6024,7 +6677,9 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -6036,10 +6691,20 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -6077,7 +6742,9 @@ if local.get $0 local.get $2 - call $~lib/set/Set#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -6090,10 +6757,20 @@ local.get $0 local.get $2 call $~lib/set/Set#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#has + local.get $2 + call $~lib/util/hash/hash32 + call $~lib/set/Set#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#values + i32.load offset=16 + local.tee $6 + call $~lib/array/Array#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#__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#set:length call $~lib/set/Set#constructor local.set $3 loop $for-loop|2 @@ -6137,7 +6857,10 @@ local.get $2 local.get $1 call $~lib/array/Array#__get - call $~lib/set/Set#has + local.tee $4 + local.get $4 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -6152,7 +6875,15 @@ local.get $1 call $~lib/array/Array#__get call $~lib/set/Set#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -6197,7 +6930,9 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -6234,7 +6969,9 @@ if local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -6246,10 +6983,20 @@ local.get $0 local.get $1 call $~lib/set/Set#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#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -6264,7 +7011,9 @@ call $~lib/set/Set#delete local.get $0 local.get $1 - call $~lib/set/Set#has + local.get $1 + call $~lib/util/hash/hash32 + call $~lib/set/Set#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#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/set/Set#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#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#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#__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#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#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#__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#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#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#__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#constructor local.set $1 loop $for-loop|0 @@ -6965,7 +7741,9 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -6977,10 +7755,20 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7018,7 +7806,9 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7031,10 +7821,20 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7064,21 +7864,65 @@ unreachable end local.get $1 - call $~lib/set/Set#values + i32.load offset=8 + local.set $6 + local.get $1 + i32.load offset=16 + local.tee $7 + call $~lib/array/Array#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#__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#set:length call $~lib/set/Set#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#__get - call $~lib/set/Set#has + local.tee $0 + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#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#__get call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7138,7 +7992,9 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -7175,7 +8031,9 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -7187,10 +8045,20 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7205,7 +8073,9 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#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#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#clear local.get $0 ) - (func $~lib/set/Set#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#__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#set:length - local.get $0 + i32.store offset=12 + local.get $3 ) (func $std/set/testNumeric (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#constructor local.set $1 loop $for-loop|0 @@ -7412,7 +8276,9 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -7424,10 +8290,20 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7465,7 +8341,9 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7478,10 +8356,20 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7511,21 +8399,65 @@ unreachable end local.get $1 - call $~lib/set/Set#values + i32.load offset=8 + local.set $6 + local.get $1 + i32.load offset=16 + local.tee $7 + call $~lib/array/Array#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#__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#set:length call $~lib/set/Set#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#__get - call $~lib/set/Set#has + local.tee $0 + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#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#__get call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7585,7 +8527,9 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -7622,7 +8566,9 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -7634,10 +8580,20 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -7652,7 +8608,9 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + call $~lib/util/hash/hash64 + call $~lib/set/Set#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/set/Set#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#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#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#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#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#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#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#constructor local.set $1 loop $for-loop|0 @@ -8242,7 +9260,10 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -8254,10 +9275,21 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -8295,7 +9327,10 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -8308,10 +9343,21 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -8355,7 +9401,11 @@ local.get $2 local.get $3 call $~lib/array/Array#__get - call $~lib/set/Set#has + local.tee $0 + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -8370,7 +9420,15 @@ local.get $3 call $~lib/array/Array#__get call $~lib/set/Set#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -8415,7 +9476,10 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -8452,7 +9516,10 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -8464,10 +9531,21 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -8482,7 +9560,10 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i32.reinterpret_f32 + call $~lib/util/hash/hash32 + call $~lib/set/Set#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#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#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#find - i32.const 0 - i32.ne - ) (func $~lib/set/Set#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#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#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#values (param $0 i32) (result i32) + (func $~lib/array/Array#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#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#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#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#constructor local.set $1 loop $for-loop|0 @@ -9072,7 +10213,10 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -9084,10 +10228,21 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -9125,7 +10280,10 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -9138,10 +10296,21 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -9185,7 +10354,11 @@ local.get $2 local.get $3 call $~lib/array/Array#__get - call $~lib/set/Set#has + local.tee $0 + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -9200,7 +10373,15 @@ local.get $3 call $~lib/array/Array#__get call $~lib/set/Set#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -9245,7 +10429,10 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -9282,7 +10469,10 @@ if local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find if i32.const 0 i32.const 1312 @@ -9294,10 +10484,21 @@ local.get $1 local.get $0 call $~lib/set/Set#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#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#find i32.eqz if i32.const 0 @@ -9312,7 +10513,10 @@ call $~lib/set/Set#delete local.get $1 local.get $0 - call $~lib/set/Set#has + local.get $0 + i64.reinterpret_f64 + call $~lib/util/hash/hash64 + call $~lib/set/Set#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 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 (result i32) + i32.const 3 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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 (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -2014,24 +1887,9 @@ local.get $10 i32.load8_s i32.store8 - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i32.load8_s + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/set/ENTRY_SIZE 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#add (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) - (local $3 i32) - (local $4 i32) - block $~lib/util/hash/HASH|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|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#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 + local.set $2 + local.get $0 + local.get $1 + local.get $2 call $~lib/set/Set#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 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 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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -4421,9 +4226,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -4638,24 +4465,9 @@ local.get $10 i32.load8_u i32.store8 - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i32.load8_u + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/set/ENTRY_SIZE 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|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|inlined.1 - end + local.get $1 + call $~lib/util/hash/HASH + local.set $2 + local.get $0 + local.get $1 + local.get $2 + call $~lib/set/Set#find local.set $3 - local.get $0 - local.get $1 local.get $3 - call $~lib/set/Set#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 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 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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -5517,9 +5295,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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 (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -5764,28 +5564,9 @@ local.get $10 i32.load16_s i32.store16 - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i32.load16_s + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/set/ENTRY_SIZE 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|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|inlined.1 - end - local.set $3 + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#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 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 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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -6667,9 +6402,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -6888,28 +6645,9 @@ local.get $10 i32.load16_u i32.store16 - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i32.load16_u + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/set/ENTRY_SIZE 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|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|inlined.1 - end - local.set $3 + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#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 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 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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -7779,9 +7475,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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.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 (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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.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.mul i32.add local.set $7 @@ -8042,32 +7760,9 @@ local.get $10 i32.load i32.store - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i32.load + call $~lib/util/hash/HASH 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.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/set/ENTRY_SIZE 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|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|inlined.1 - end - local.set $3 + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#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.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.mul i32.add local.set $7 @@ -8508,34 +8180,11 @@ (local $5 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -8929,9 +8578,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -9150,32 +8821,9 @@ local.get $10 i32.load i32.store - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i32.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/set/ENTRY_SIZE 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|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|inlined.1 - end - local.set $3 + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#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 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 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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -10037,9 +9639,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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 (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#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#has (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -10351,59 +9974,32 @@ local.get $10 i64.load i64.store - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 16 + call $~lib/set/ENTRY_SIZE 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#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|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|inlined.1 - end - local.set $3 + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -10820,45 +10388,17 @@ local.get $2 ) (func $~lib/set/Set#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -11253,9 +10793,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 i64) (result i32) - (local $2 i64) - local.get $0 - local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + (func $~lib/set/Set#has (param $0 i32) (param $1 i64) (result i32) + local.get $0 + local.get $1 + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -11479,59 +11040,32 @@ local.get $10 i64.load i64.store - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + i64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 16 + call $~lib/set/ENTRY_SIZE 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#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|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|inlined.1 - end - local.set $3 + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -11948,45 +11454,17 @@ local.get $2 ) (func $~lib/set/Set#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -12381,9 +11859,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 3 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 f32) (result i32) - (local $2 f32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -12596,48 +12095,32 @@ local.get $10 f32.load f32.store - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + f32.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 8 + call $~lib/set/ENTRY_SIZE 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#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|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|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#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 + local.set $2 + local.get $0 + local.get $1 + local.get $2 call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -13043,34 +12509,17 @@ local.get $2 ) (func $~lib/set/Set#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#rehash end i32.const 1 @@ -13465,9 +12914,28 @@ local.get $0 call $~lib/rt/pure/__release ) + (func $~lib/set/ENTRY_ALIGN (result i32) + i32.const 7 + ) + (func $~lib/set/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/set/ENTRY_ALIGN + 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#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 + 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#clear local.get $0 ) + (func $~lib/util/hash/HASH (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#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#has (param $0 i32) (param $1 f64) (result i32) - (local $2 f64) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.0 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -13684,52 +13154,32 @@ local.get $10 f64.load f64.store - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $10 + f64.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 16 + call $~lib/set/ENTRY_SIZE 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#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|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|inlined.1 - end - local.set $3 + local.get $1 + call $~lib/util/hash/HASH + local.set $2 local.get $0 local.get $1 - local.get $3 + local.get $2 call $~lib/set/Set#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 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 i32.mul i32.add local.set $7 @@ -14139,38 +13568,17 @@ local.get $2 ) (func $~lib/set/Set#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/set/Set#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#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#get:length (param $0 i32) (result i32) + (func $~lib/staticarray/StaticArray#__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#__get (param $0 i32) (param $1 i32) (result i32) - local.get $1 - local.get $0 - call $~lib/staticarray/StaticArray#get:length i32.ge_u if i32.const 1072 @@ -61,7 +57,11 @@ (func $~lib/staticarray/StaticArray#__set (param $0 i32) (param $1 i32) i32.const 1 local.get $0 - call $~lib/staticarray/StaticArray#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#__get @@ -1360,8 +1332,10 @@ call $~lib/builtins/abort unreachable end - i32.const 1040 - call $~lib/staticarray/StaticArray#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#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#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#__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 (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 - 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 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 (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 + 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 + 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 + 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 + 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 - 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 - 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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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#set local.get $0 ) - (func $~lib/map/Map#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#find - i32.const 0 - i32.ne - ) (func $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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#has + local.get $0 + call $~lib/util/hash/hash32 + call $~lib/map/Map#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 (result i32) + i32.const 3 + ) + (func $~lib/map/ENTRY_SIZE (result i32) + (local $0 i32) + (local $1 i32) + call $~lib/map/ENTRY_ALIGN + 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#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 + 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 (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#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 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 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|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|inlined.1 - end + local.get $10 + i32.load + call $~lib/util/hash/HASH 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 i32.add local.set $8 end local.get $6 - i32.const 12 + call $~lib/map/ENTRY_SIZE 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|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|inlined.0 - end - local.set $4 + local.get $1 + call $~lib/util/hash/HASH + local.set $3 local.get $0 local.get $1 - local.get $4 + local.get $3 call $~lib/map/Map#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 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#has (param $0 i32) (param $1 i32) (result i32) - (local $2 i32) local.get $0 local.get $1 - block $~lib/util/hash/HASH|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|inlined.2 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#find i32.const 0 i32.ne ) (func $~lib/map/Map#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|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|inlined.3 - end + local.get $1 + call $~lib/util/hash/HASH call $~lib/map/Map#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#__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#__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#__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#__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#__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 (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 (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 (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 (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 (param $0 i32) (param $1 i32) (result i64) + (func $~lib/typedarray/Uint8Array#reduceRight (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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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 (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 - 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 (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 + 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 - ) (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 + 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 + 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 local.get $2 + call $~lib/util/number/utoa32_core + local.get $1 call $~lib/rt/pure/__retain ) (func $~lib/util/number/itoa_stream (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 + call $~lib/util/number/utoa32_core local.get $1 ) (func $~lib/util/string/joinIntegerArray (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 + 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 + 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 + 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 + 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 + local.tee $3 + local.set $1 local.get $3 - i32.add - i32.load8_u - call $~lib/util/number/itoa_stream + 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 + 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 (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 + call $~lib/util/number/utoa32_core local.get $1 ) (func $~lib/util/string/joinIntegerArray (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 + 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 + 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 (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 + call $~lib/util/number/utoa32_core local.get $1 ) (func $~lib/util/string/joinIntegerArray (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 + 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 + 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 + 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 (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 + call $~lib/util/number/utoa32_core local.get $0 ) (func $~lib/util/string/joinIntegerArray (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 + 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 + 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 (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 + call $~lib/util/number/utoa32_core local.get $0 ) (func $~lib/util/string/joinIntegerArray (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 + 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 + 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 (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 (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 + 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 + call $~lib/util/number/utoa64_core end local.get $0 ) (func $~lib/util/string/joinIntegerArray (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 - 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 - 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 + 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 + 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 ) (func $~lib/util/number/itoa_stream (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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 + 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 - 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 - 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 - ) - (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 - 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 - 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 + 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 + 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 (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 + 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 + 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#__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#__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#__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> (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#__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> (param $0 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array,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> - 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> 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> + 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#__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#__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> - 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> 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> + 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#__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> (param $0 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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> (param $0 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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> + call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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> + call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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> + call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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> + call $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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> (param $0 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array,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#__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> (param $0 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array,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> - local.get $0 + local.tee $1 + call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array,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> - 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> + 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#__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> - local.get $0 + local.tee $1 + call $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array,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> - 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> + 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> (param $0 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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#__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#__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> (param $0 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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> - local.get $0 + local.tee $1 + call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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> - 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> + 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#__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> - local.get $0 + local.tee $1 + call $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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> - 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> + 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~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 else - local.get $1 - local.get $30 + local.get $0 + local.get $28 call $~lib/util/sort/weakHeapSort 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 - 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 - 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.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.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.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.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 - 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 - 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.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.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.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.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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__get - call $~lib/typedarray/Int32Array#__set - local.get $1 - i32.const 1 - i32.const 2704 - i32.const 1 - call $~lib/array/Array#__get - call $~lib/typedarray/Int32Array#__set - local.get $1 - i32.const 2 - i32.const 2704 - i32.const 2 - call $~lib/array/Array#__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#__get - call $~lib/typedarray/Uint32Array#__set - local.get $1 - i32.const 1 - i32.const 2704 - i32.const 1 - call $~lib/array/Array#__get - call $~lib/typedarray/Uint32Array#__set - local.get $1 - i32.const 2 - i32.const 2704 - i32.const 2 - call $~lib/array/Array#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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#__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 + 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 + 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 + 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 + 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#__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#__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#__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#__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#__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#__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#__get + call $~lib/typedarray/Int32Array#__set + local.get $1 + i32.const 1 + i32.const 2704 + i32.const 1 + call $~lib/array/Array#__get + call $~lib/typedarray/Int32Array#__set + local.get $1 + i32.const 2 + i32.const 2704 + i32.const 2 + call $~lib/array/Array#__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#__get + call $~lib/typedarray/Uint32Array#__set + local.get $1 + i32.const 1 + i32.const 2704 + i32.const 1 + call $~lib/array/Array#__get + call $~lib/typedarray/Uint32Array#__set + local.get $1 + i32.const 2 + i32.const 2704 + i32.const 2 + call $~lib/array/Array#__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#__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#__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#__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#__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#__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#__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 (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 + else + local.get $0 + local.get $1 + local.get $2 + call $~lib/util/sort/weakHeapSort + 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 - else - local.get $10 - local.get $9 - local.get $8 - call $~lib/util/sort/weakHeapSort + 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 + 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~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 (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|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|inlined.0 - end + call $~lib/util/sort/COMPARATOR 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#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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (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 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -33212,9 +32912,6 @@ (func $~lib/util/number/itoa_stream (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 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -33568,9 +33255,6 @@ (func $~lib/util/number/itoa_stream (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 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) @@ -33886,9 +33560,6 @@ (func $~lib/util/number/itoa_stream (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 (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 + 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.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.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 + 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 (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 (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 (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 - 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.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.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 - 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 (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 (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 (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (func $~lib/util/string/joinIntegerArray (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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int8Array,i8,~lib/array/Array,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#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#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> (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> + 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> (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> (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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint8Array,u8,~lib/array/Array,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#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#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> (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> + 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> (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> (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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array,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#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#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> (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> + 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint8ClampedArray,u8,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int16Array,i16,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint16Array,u16,~lib/array/Array,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#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#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> (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> 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> (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> (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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int32Array,i32,~lib/array/Array,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#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#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> (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> 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> (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> (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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint32Array,u32,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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#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#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> (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> + 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Int64Array,i64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array,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#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#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> (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> + 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Uint64Array,u64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array,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#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#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> (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> 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> (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> (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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Float32Array,f32,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array,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#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#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> (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> 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> (param $0 i32) (param $1 i32) (param $2 i32) + (func $~lib/typedarray/SET<~lib/typedarray/Float64Array,f64,~lib/array/Array,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#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#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> (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> 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 (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 - 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 - 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